Everyone knows the e-way bill limit is ₹50,000. Fewer know that number only settles inter-state movement. Your own state decides the intrastate line — five big states set it at ₹1 lakh, and Rajasthan runs two tiers at once. Fewer still know the validity maths — one day per 200 km. Or the 8-hour extension window that decides whether an expired bill is fixable. Detention costs 200% of tax under Section 129. This post has all of it: the state table, the calculators, and the ERPNext expiry watch that pings your driver before a checkpoint does. This guide on e way bill limit is written for Indian SMEs, with code samples, ERPNext / Medusa recipes, and step-by-step fixes you can copy into a real project.
Every detention story we've been called into started the same way — an e-way bill limit misread, a bill that expired on a Saturday, a driver who kept driving. I am Manoj, ERPNext and Frappe implementation lead at MithTech in Bengaluru. The expiry watch at the end of this post exists because of those calls.
How do you check your state's limit?
The inter-state answer is always ₹50,000. The intrastate answer depends on where the truck starts:
Pick your source state — get the intrastate e-way bill threshold and the notification quirks worth knowing.
What does the state-wise table say?
The same data as a scannable reference. Verified 2026-08-06 against MyBillBook's state-wise tracker, Busy's threshold table and Bajaj Finserv's 2026 guide — state notifications move, so confirm yours before a dispatch decision:
11 rows · click a column to sort
| Threshold | Notes | |
|---|---|---|
| Inter-state — all India | ₹50,000 | Uniform under Rule 138 |
| Maharashtra (intrastate) | ₹1,00,000 | |
| Delhi NCT (intrastate) | ₹1,00,000 | |
| Tamil Nadu (intrastate) | ₹1,00,000 | |
| Bihar (intrastate) | ₹1,00,000 | |
| Punjab (intrastate) | ₹1,00,000 | |
| Rajasthan (intrastate) | ₹1,00,000 / ₹2,00,000 | Two tiers — ₹2 lakh within city limits, ₹1 lakh between cities |
| West Bengal (intrastate) | ₹50,000 | Reverted from ₹1 lakh on 1 Dec 2023 |
| All other states / UTs (intrastate) | ₹50,000 | Unless separately notified |
| Job work — inter-state | Any value | Value floor does not apply |
| Handicraft goods — inter-state | Any value | Value floor does not apply |
Two structural notes. The threshold tests consignment value — broadly the invoice value including tax, excluding exempt goods in the same truck. And the two any-value exceptions surprise people annually. A principal sending ₹8,000 of castings to a job worker across a state border needs an e-way bill for it.
When you need one at all
Seven movement scenarios — inter-state, intrastate, job work, handicrafts, non-motorised, exempt goods — with the verdict for each.
How is validity computed?
Validity is mechanical: one day per 200 km or part thereof, and one day per 20 km for over-dimensional cargo. Day one runs to midnight of the day after generation. A 450 km haul gets three days; a 201 km haul gets two.
Distance and cargo type in — validity days and the extension-window rules out.
The rules around the edges matter more than the division:
| Number | Since | |
|---|---|---|
| Standard cargo validity | 1 day per 200 km | 2021 revision |
| Over-dimensional cargo | 1 day per 20 km | — |
| Extension window | 8 hours before or after expiry | — |
| Document age cap at generation | 180 days | 1 Jan 2025 |
| Maximum extension chain | 360 days from generation | 1 Jan 2025 |
The January 2025 date caps closed two old loopholes — billing against ancient invoices, and extending a bill forever. The 8-hour window is the operational one. An expired bill discovered Monday morning, for a truck that stopped Saturday night, is usually unfixable. That is precisely the gap the expiry watch below closes.
What detention actually costs
An expired e-way bill is treated the same as a missing one. Section 129 lets officers detain the goods and the vehicle, and release pricing is fixed:
Consignment value and GST rate in — the Section 129 release payment out, for taxable and exempt goods.
For taxable goods with the owner coming forward, release costs 200% of the tax payable. For exempt goods, 2% of value capped at ₹25,000. The uncounted costs usually exceed the penalty: a detained truck is a missed delivery, demurrage, and a customer conversation. Minor documentation errors — spelling mistakes, a wrong PIN with the correct route — may instead draw a ₹500/₹1,000 penalty under the relaxation circulars. Do not plan around officer generosity.
If the truck is stopped
The first hour decides most detention outcomes. The sequence that protects you:
- Instruct the driver to cooperate and photograph everything — the bill, the invoice, the physical goods, the officer's initial memo.
- Escalate to the finance controller immediately — the one-hour rule in the SOP below exists because delay narrows options.
- Get the statutory forms — detention proceeds through MOV-01 to MOV-09; insist each step is documented on paper, not verbally.
- Verify the alleged defect yourself — an expired bill, a value mismatch and a clerical typo carry very different exposure, and officers conflate them.
- Decide payment versus contest with your CA on the call — paying under Section 129 releases the goods fast but has consequences for contesting later.
How ERPNext resolves the threshold
The state-wise variation above is not a footnote for software — it is the design problem. india_compliance solves it with a config table, and the resolution logic is worth reading (from india_compliance/gst_india/utils/e_waybill.py, checked at v16.6.0 on ERPNext v16.28.0):
def _get_e_waybill_threshold(doc, gst_settings=None): # :1966
if not gst_settings:
gst_settings = frappe.get_cached_doc("GST Settings")
if is_inter_state_supply(doc):
return gst_settings.e_waybill_threshold # flat ₹50k
return get_intrastate_threshold(doc, gst_settings)
def get_intrastate_threshold(doc, gst_settings=None): # :1975
...
state = get_source_state_code(doc)
state_config = get_state_code_wise_config(gst_settings)
if state in state_config:
config = state_config[state]
if not config.get("intrastate_applicable"):
return None
return config.get("intrastate_threshold")
return gst_settings.e_waybill_threshold
Inter-state supplies use the flat e_waybill_threshold. Intrastate resolves the source state against a State-wise e-Waybill Threshold table in GST Settings (e_waybill_threshold_for_intrastate, read at :1999) — with a per-state off-switch. Bills generate from Sales Invoices, Delivery Notes, Stock Entries and Subcontracting Receipts (:1150–1157) — the last two are how the job-work exception is handled in practice. Generated bills land in the e-Waybill Log doctype with valid_upto, is_cancelled and extension details — the exact fields the expiry watch queries. There is even built-in scheduled extension (extend_scheduled_e_waybills, :684) for bills you know will run long.
Pre-flight: the config table is empty by default
india_compliance falls back to the flat threshold when a state has no row in the intrastate table. Dispatch from Maharashtra with an empty table, and ERPNext prompts e-way bills from ₹50,000. That over-generates against the state's ₹1 lakh line. Harmless legally, wasteful operationally. The reverse misconfiguration — a wrong higher threshold — is the dangerous one. Populate the e_waybill_threshold_for_intrastate table for every state you ship from, and re-verify it whenever a state notification changes.
Dispatch raises, accounts extends
The org failure behind most detentions is that nobody owns the bill after the truck leaves. The split that works:
- Dispatch owns generation. No vehicle moves on an above-threshold consignment without an e-way bill number on the Delivery Note. The client-script warning below makes this visible at submit.
- Accounts owns extensions and cancellations. The 8-hour window means extension is a monitored duty, not an on-request favour. The hourly watch is their feed.
- Drivers get told. The n8n recipe pushes expiry alerts to the driver's WhatsApp. The person who can actually stop and wait for an extension is the one who needs the message.
How does the expiry watch work?
A dispatch-time warning, an hourly expiring-bills sweep over the e-Waybill Log, a packaged hooks.py variant, and driver WhatsApp alerts via n8n.
A transit policy you can lift into your SOP
e-Way Bill Policy (draft — for CA / ops review): No above-threshold consignment leaves the gate without an e-way bill number recorded on the dispatch document. The threshold per source state is maintained in GST Settings and reviewed quarterly against state notifications. Part-B is updated on every vehicle change. The hourly expiry watch alerts dispatch and accounts at T-8 hours; accounts extends within the window or instructs the driver to halt. Any detention is escalated to the finance controller within one hour, with the CA engaged before any payment under Section 129. Bills nearing the 360-day extension cap, or documents nearing the 180-day generation cap, are flagged weekly. Ratify thresholds and escalation contacts with your CA and transporters.
Should you choose Fix now or accept the risk?
| Fix this week | Acceptable to defer |
|---|---|
| Dispatching above threshold with e-way bills generated 'later today' | Voluntary bills on sub-threshold consignments |
| No expiry monitoring — extensions happen only when a driver calls | Auto-extension tuning for routes that never run long |
| Intrastate threshold table empty while shipping from ₹1-lakh states | Optimising Part-B updates for single-vehicle direct runs |
| Inter-state job work moving without bills because 'it's under ₹50k' | — that one is never deferrable; the floor doesn't apply |
FAQ
+What is the e-way bill limit for intrastate movement?
It depends on the state the movement starts in. Most states use ₹50,000. Maharashtra, Delhi, Tamil Nadu, Bihar and Punjab set ₹1 lakh, and Rajasthan runs ₹2 lakh within city limits with ₹1 lakh between cities. Inter-state movement is ₹50,000 everywhere.
+How long is an e-way bill valid for 100 km?
One day. Validity is one day per 200 km or part thereof for standard cargo, so anything up to 200 km gets a single day. It runs to midnight of the day after generation. Over-dimensional cargo earns a day per 20 km, so 100 km ODC gets five days.
+Is an e-way bill needed for job work?
Inter-state job work: yes, at any value — the ₹50,000 floor does not apply when a principal sends goods to a job worker across state lines. Intrastate job work follows the state's normal threshold. In ERPNext these movements ride on Stock Entry and Subcontracting Receipt, both of which india_compliance supports for e-way bills.
+What happens if my e-way bill expires in transit?
Movement on an expired bill is treated as movement without one. Under Section 129 the goods and vehicle can be detained, with release at 200% of the tax payable (or 2% of value capped at ₹25,000 for exempt goods). The fix is prevention: extend within the 8-hour window around expiry, or stop the vehicle until extended.
+Can I extend an e-way bill after it has expired?
Only within 8 hours after expiry (or the 8 hours before it). Outside that window the bill cannot be extended at all, and the consignment needs to stop. Extensions also cannot run past 360 days from original generation.
+What are Part-A and Part-B of an e-way bill?
Part-A carries the consignment details — GSTINs, document number, value, HSN. Part-B carries the transport details — vehicle number or transporter document. A bill without Part-B is generally not valid for movement (the courier/transporter fills it in multi-leg journeys), and Part-B updates on every vehicle change.
What is the 180-day rule for e-way bills?. Since 1 January 2025, an e-way bill cannot be generated against a base document older than 180 days. Its sibling rule caps extensions at 360 days from the bill's original generation. Together they ended the practice of billing old invoices and extending bills indefinitely.
Which ERPNext version does this post apply to?. Code citations are from india_compliance v16.6.0 on ERPNext v16.28.0. The threshold resolver, state-wise config table and e-Waybill Log are current as of that version, and v15 behaves equivalently. The statutory rules are software-independent.
What related issues might you also hit?
- GST changes from 1 April 2026 — the FY cutover this transit policy plugs into, including the blocked-3B cascade that suspends e-way bill generation.
- The e-invoice limit and liability dates — the ₹5 crore mandate that usually arrives alongside serious dispatch volumes.
- The e-invoice IRP round-trip in ERPNext — india_compliance can generate the e-way bill together with the IRN in one motion.
What is the bottom line?
The e-way bill limit itself is the easy part — ₹50,000 inter-state, your state's number at home, two any-value exceptions. What actually detains trucks is time: a validity someone computed wrong, an extension window someone slept through. Put the state table into GST Settings, the watch on the scheduler, and the driver on the alert list. Your ERPNext instance already has every field this needs — the recipes just switch them on.
Trucks moving, bills lagging?
We wire e-way bill generation, state-wise thresholds and the expiry watch into ERPNext as one fixed-scope engagement — dispatch stops improvising and detentions stop happening.