Build E-Way Bill (EWB) JSON
Skill: Convert consignment data into the E-Way Bill JSON
Region: India Category: Logistics — GST e-Way Bill Does: Takes consignment/transport data for a movement of goods and produces the E-Way Bill (EWB) JSON submitted to the e-Way Bill portal (NIC), which returns an EWB number and validity. Covers Part A (supplier, recipient, document, value, HSN) and Part B (vehicle/transport), transporter ID, approximate distance, and the ₹50,000 value threshold. System: e-Way Bill portal (ewaybillgst.gov.in) — NIC EWB API/JSON
An e-Way Bill is required for the movement of goods where the consignment value exceeds ₹50,000 (some states set lower intra-state thresholds; certain goods are exempt). Part A carries the invoice/value detail; Part B carries the vehicle/transport detail and starts the validity clock (broadly 1 day per 200 km for regular cargo). The EWB and the GST e-invoice can be generated together from the IRP. Schema versions, distance/validity rules, and exemptions change — generate against the current NIC EWB schema and validate on the sandbox before going live.
When this applies
- Movement of goods of value > ₹50,000 for supply, for reasons other than supply (e.g. branch transfer, job work), or inward supply from an unregistered person.
- Generated by the supplier, recipient, or transporter before movement begins; Part B must be updated with the conveyance before transit.
- Not required for exempt goods, non-motorised conveyance, or within notified short distances/areas.
Input data required
| Group | Fields |
|---|---|
| Document | supplyType (O outward / I inward), subSupplyType (1 supply, 2 import, 3 export, 4 job work, …), docType (INV/BIL/BOE/CHL), docNo, docDate (dd/mm/yyyy) |
| Supplier (Part A) | fromGstin (URP if unregistered), fromTrdName, fromAddr1, fromPlace, fromPincode, fromStateCode, actFromStateCode (dispatch) |
| Recipient (Part A) | toGstin, toTrdName, toAddr1, toPlace, toPincode, toStateCode, actToStateCode (ship-to) |
| Item list | per line: productName, hsnCode, quantity, qtyUnit, taxableAmount, cgstRate/sgstRate/igstRate/cessRate |
| Values | totalValue, cgstValue, sgstValue, igstValue, cessValue, totInvValue |
| Transport (Part B) | transporterId (GSTIN/TRANSIN), transMode (1 road, 2 rail, 3 air, 4 ship), transDistance (km), vehicleNo, vehicleType (R/O), transDocNo, transDocDate |
Document structure (NIC EWB JSON)
{
"supplyType": "O",
"subSupplyType": "1",
"docType": "INV",
"docNo": "INV-2025-0042",
"docDate": "04/06/2025",
"fromGstin": "29AABCU9603R1ZM",
"fromTrdName": "Acme Components Pvt Ltd",
"fromAddr1": "12 Industrial Layout", "fromPlace": "Bengaluru",
"fromPincode": 560058, "fromStateCode": "29", "actFromStateCode": "29",
"toGstin": "27AAACR5055K1Z9",
"toTrdName": "Sahyadri Traders",
"toAddr1": "44 MIDC", "toPlace": "Pune",
"toPincode": 411019, "toStateCode": "27", "actToStateCode": "27",
"transactionType": 1,
"totalValue": 200000.00, "cgstValue": 0.00, "sgstValue": 0.00,
"igstValue": 36000.00, "cessValue": 0.00, "totInvValue": 236000.00,
"transporterId": "29AABCT1234R1ZX",
"transMode": "1", "transDistance": "840",
"vehicleNo": "KA01AB1234", "vehicleType": "R",
"itemList": [ { "productName","hsnCode","quantity","qtyUnit","taxableAmount",
"cgstRate","sgstRate","igstRate","cessRate" } ]
}
Key rules: state codes are the 2-digit GST state codes. Inter-state (supplier state ≠ recipient state) uses IGST; intra-state uses CGST+SGST. transDistance drives validity; vehicleType is R (regular) or O (over-dimensional cargo).
Calculation rules
- Consignment value = taxable value of goods + tax (excluding value of exempt goods on the same invoice); the ₹50,000 test is on this value.
- Per line tax =
taxableAmount × rate; inter-state → IGST; intra-state → CGST + SGST. totInvValue=totalValue+ cgst + sgst + igst + cess.- Validity: ~1 day per 200 km for regular cargo (different slab for over-dimensional cargo); counted from Part B entry; extendable within the allowed window.
Worked example (inter-state, road — request payload)
{
"supplyType": "O",
"subSupplyType": "1",
"docType": "INV",
"docNo": "INV-2025-0042",
"docDate": "04/06/2025",
"fromGstin": "29AABCU9603R1ZM",
"fromTrdName": "Acme Components Pvt Ltd",
"fromAddr1": "12 Industrial Layout", "fromPlace": "Bengaluru",
"fromPincode": 560058, "fromStateCode": "29", "actFromStateCode": "29",
"toGstin": "27AAACR5055K1Z9",
"toTrdName": "Sahyadri Traders",
"toAddr1": "44 MIDC", "toPlace": "Pune",
"toPincode": 411019, "toStateCode": "27", "actToStateCode": "27",
"transactionType": 1,
"totalValue": 200000.00,
"cgstValue": 0.00, "sgstValue": 0.00, "igstValue": 36000.00, "cessValue": 0.00,
"totInvValue": 236000.00,
"transporterId": "29AABCT1234R1ZX",
"transMode": "1",
"transDistance": "840",
"vehicleNo": "KA01AB1234",
"vehicleType": "R",
"itemList": [
{
"productName": "Steel bracket", "hsnCode": "73269099",
"quantity": 1000, "qtyUnit": "NOS", "taxableAmount": 200000.00,
"cgstRate": 0, "sgstRate": 0, "igstRate": 18, "cessRate": 0
}
]
}
The portal responds with the EWB number and validity:
{
"ewayBillNo": 391000123456,
"ewayBillDate": "04/06/2025 11:40:00 AM",
"validUpto": "09/06/2025 11:59:00 PM"
}
Carry the EWB number with the consignment; update Part B on any vehicle change.
Validation checklist
- Current NIC EWB schema version and code lists used
- Consignment value > ₹50,000 (or lower applicable intra-state threshold); exempt goods excluded
- Valid GSTINs (or
URP); from/to state codes and actual dispatch/ship-to states set -
subSupplyTypeanddocTypematch the movement; HSN on each line - Inter-state → IGST; intra-state → CGST+SGST; values reconcile to
totInvValue - Part B vehicle/transport detail and
transDistancepresent before movement - Validity (~1 day / 200 km) tracked; extended within the window if needed
- Linked to the e-invoice/IRN where applicable; not duplicated against the same document
Last updated: 2026-06-04 — confirm the active schema version, field codes, distance/validity rules, and portal/API requirements against the current NIC (ewaybillgst.gov.in) specifications before use.