Invocie

Industry

India E-Invoicing: GSTN, IRPs, and the ₹5 Crore Threshold

India's IRP-based clearance system covers every B2B invoice from sellers above the ₹5 crore AATO threshold. Here's how the flow actually works, plus the gotchas that catch first-time integrators.

Invocie Team · 8 เมษายน 2569 · 6 นาทีการอ่าน


India runs one of the largest e-invoicing systems in the world by volume — over a billion invoices a year clear through the GSTN's network of Invoice Registration Portals (IRPs). The threshold has dropped progressively: ₹500 crore in 2020, ₹100 crore in 2021, ₹20 crore in 2022, ₹10 crore in 2023, and ₹5 crore from August 2023 onward. If your aggregate annual turnover (AATO) in any year since 2017-18 crossed ₹5 crore, every B2B invoice you issue must be reported.

How the IRP flow works

The model looks similar to ZATCA's clearance but mechanically simpler — no per-device CSID, no cryptographic hash chain across invoices. The IRP is a stateless validator with an authoritative numbering function.

  1. Your ERP serialises the invoice into the GSTN JSON schema (currently Notification 78/2020 schema, v1.1).
  2. It calls the IRP's POST /invoice/uploadinvoice endpoint with the JSON, authenticated via an auth-token that expires in 6 hours.
  3. The IRP validates structure + GST math + GSTIN existence, then returns an Invoice Reference Number (IRN — 64-char hash), a signed QR code (base64-encoded JWT), and an Acknowledgement Number.
  4. Only after you receive the IRN can the invoice be legally issued to the buyer.

Required fields in the JSON schema

The schema is opinionated. Mandatory blocks include TranDtls (transaction type, supply category), DocDtls (invoice number, date, type — INV / CRN / DBN), SellerDtls and BuyerDtls (with GSTIN, legal name, state code), ItemList (with HSN/SAC code, quantity, unit, rate, GST rates per item), and ValDtls (the summary totals). The IRP recomputes ValDtls server-side and rejects if your math is even one paise off.

Common rejection codes

  • 2150 — Duplicate IRN: you're submitting an invoice that's already been registered. Idempotency saves you here; cache the IRN by your local invoice ID.
  • 2172 — Recipient GSTIN doesn't exist or is cancelled. Validate via the GSTIN lookup API before submission, not at user-input time.
  • 2189 — Invalid HSN code for the line item. HSN is 4-digit minimum for ₹5cr-50cr taxpayers, 6-digit for above ₹50cr.
  • 2199 — Document date is more than 30 days in the past. India's IRP enforces a 30-day reporting window; older invoices get refused.
  • 2233 — The supplier GSTIN's e-invoicing eligibility flag is off. Trigger an explicit registration on the e-invoice portal before going live.

GSTR auto-population

Once an invoice has an IRN, it auto-flows into your GSTR-1 (outward supplies) return and the buyer's GSTR-2A (purchase reconciliation). You'll still file GSTR-1 — but the line items are pre-filled. This is the killer feature of the system: the return becomes a confirmation step rather than data entry.

E-Way Bill integration

If the invoice triggers an E-Way Bill (movement of goods above ₹50,000 in value), the IRP can generate the EWB in the same call — pass Part-A and Part-B details in the JSON and the response includes an EWB Number alongside the IRN. Skipping this means re-keying the same data into the EWB portal, which nobody enjoys.

Invocie's AsiaStrategy implements the GSTN JSON schema, IRP token rotation, idempotent submission, and EWB integration in one call. The same canonical invoice that ZATCA-clears in Saudi Arabia gets IRN-registered in India without code changes upstream.


อ่านเพิ่มเติม

ส่งใบกำกับที่ปฏิบัติตามได้ในทุกตลาด

ZATCA, FTA, Peppol และ post-audit ระดับโลก — API เดียว

พูดคุยกับทีมของเรา