An e-way bill is required when a single consignment exceeds fifty thousand rupees in value, or when the aggregate value of consignments in one vehicle does. That is the interstate rule; intrastate thresholds vary by state, ranging from fifty thousand up to two lakh, which is the first thing an engineer discovers is not a single number. Normally the supplier generates it, but the recipient may where they transport goods themselves, and where an unregistered supplier sells to a registered buyer, compliance falls on the buyer.
The document splits into two parts with different lifecycles. Part A carries the consignment: recipient GSTIN, delivery PIN code, invoice or challan number and date, value, HSN codes and reason for transport. Part B carries the transport: vehicle registration number or transport document details. The important constraint is that once Part B has been submitted it cannot be entered again for the same entry — only the vehicle number can be updated. Systems designed on the assumption that transport details can be revised freely break the first time a consignment changes hands.
Validity is computed rather than fixed, which surprises teams modelling it as an expiry timestamp set at creation. Regular cargo receives one day per two hundred kilometres, so a 310 kilometre movement gets two days. Over-dimensional cargo gets one day per twenty kilometres. Extensions are possible up to eight hours before or after expiry with justification, and since 1 January 2025 extensions are capped at 360 days from original generation. That means your data model needs distance as an input and validity as a derived, extendable value with a hard ceiling.
Two further 2025 and 2026 changes matter for anyone maintaining an integration. From 1 January 2025, an e-way bill can only be generated against a document dated within 180 days, which rules out back-dated generation for old invoices. A voluntary closure facility now lets the supplier, recipient or transporter formally declare delivery complete. And from 1 August 2026, ship-to GSTIN became mandatory in applicable transactions through the updated APIs — a field change that silently breaks integrations that were passing it optionally.
The exemptions are worth encoding rather than handling case by case: non-motorised transport, goods under customs supervision, defence ministry consignments, empty containers, and rail movement by government entities. Hard-coding the exemption logic and keeping it in one place beats scattering conditionals through the order pipeline, because the list changes and you want one thing to update.
The penalty gives the whole integration its urgency. Moving goods without valid documentation attracts ten thousand rupees or the tax sought to be evaded, whichever is higher, plus detention of the goods and seizure of the vehicle. A truck held at a checkpoint is not a compliance abstraction — it is a customer delivery failing in real time. That is the argument for building generation as a blocking step in the dispatch flow with clear failure handling, rather than as an asynchronous job that usually succeeds.