A GSTR-1 JSON has to pass the offline tool’s rules, and this guide covers the refusals sellers hit most, the error report and a safe second upload.
The file has to pass the offline tool’s rules, not only the law
A GSTR-1 JSON goes in through one door on the portal: Returns Dashboard, the period, GSTR-1, Prepare Offline, Upload. That upload is built around GSTN’s Returns Offline Tool, and the file has to obey the tool’s rules as well as the law. A return can reconcile to the paisa and still be refused for a stray character in an invoice number.
The rules are about form, not about whether the tax is right:
- Field names exactly as the tool writes them, and every date as dd-mm-yyyy.
- Amounts with no more than two decimal places.
- Invoice and note numbers of at most sixteen characters: letters, digits, and only "/" and "-" as punctuation.
- Places of supply, rates and unit codes taken from fixed lists.
- Integrated tax only on an inter-state supply, and central and state tax only on an intra-state one, as sections 7 and 8 of the IGST Act, 2017 divide them.
These are the refusals sellers hit most often
The portal takes the file first and checks it afterwards. Once it has processed the upload, the status reads Processed, or Processed with Error, and the records that failed come back in an error report with codes that begin RET191. This guide goes by what each refusal means; the RET191 codes guide gives each code GSTN documents, in its own words. Most follow from the tool’s field rules; the rest are checks the portal makes against what it already holds:
- A document number with a space, a dot, an underscore or a hash in it, or longer than sixteen characters. INV 0042 and INV.42 are refused; INV/0042 and INV-42 are not.
- A document number used twice. Rule 46(b) of the CGST Rules, 2017 makes an invoice number unique for the financial year. The portal can also hold a number against what was filed in earlier tax periods, which the offline tool on your computer cannot see.
- A document dated after the period being filed ends.
- A buyer GSTIN that is malformed or wrong, or one that is your own registration: a receiver cannot be the supplier.
- An HSN code that is not on the portal’s list. The portal checks every code against its own master, and one bad row can cost the whole table: a seller’s catalogue carried 71170990 on one listing, and the portal refused all of Table 12 and processed the rest of the return, because heading 7117 subdivides only into 711711, 711719 and 711790.
- A unit that is not on the portal’s unit list, a place of supply that is not a state code, or a rate that has never been a GST rate.
Two refusals date from May 2025, and some mistakes still go through
Under the GSTN advisory of 2 May 2025 (Phase III, Tables 12 and 13), from the May 2025 return period the B2B tab of Table 12 cannot be empty when the return reports supplies to registered buyers, and Table 13, the document summary, is mandatory: a return with supplies and a blank Table 13 is refused. The same advisory has HSN codes chosen from the portal’s list rather than typed, at four digits where aggregate turnover in the previous financial year was ₹5 crore or less and six above it, the depth Notification 78/2020-Central Tax has required since 1 April 2021.
The advisory also says what is not refused. The comparison between each tab of Table 12 and the supply tables it summarises runs in warning mode, so an HSN summary that covers half the month draws a warning and still files. Nor can the portal know that a real, well-formed registration belongs to some business other than your buyer. A clean upload is the floor, not the proof: hold the summary the portal generates against the figures you prepared before you submit.
The error report waits on the Prepare Offline page
The error report is not an email or a pop-up. This is the way to it, and How to read the GSTR-1 error report goes through what is in it:
- Open Returns Dashboard, choose the period, open GSTR-1 and then Prepare Offline. Each upload is listed with its status.
- Where the status reads Processed with Error, click Generate error report. It is not ready at once; come back to the page for it.
- Click Download error report when the link appears. The file is a zip; leave it zipped.
- Open the Returns Offline Tool on your computer, choose Open Downloaded Error File from GST portal, and select the zip.
- Only the sections with errors are filled in. Open each one: the message sits against the invoice it concerns.
A second upload replaces what it carries and removes nothing
The report holds only the records that failed; everything else in the file went in. Fix each refusal where it started: the register row, the column mapping, the buyer’s registration, the HSN on the product listing. Editing the rows inside the tool mends this month and leaves the same mistake waiting in next month’s file.
Then upload the whole corrected JSON, with the whole month’s Table 12, not a file of the mended rows alone, and do it before the return is filed with DSC or EVC; after that, a correction is an amendment in a later return. A second upload for the same period does not simply add to the first. Each kind of record behaves in its own way when it is uploaded again:
- An invoice or note uploaded again under the same number replaces the earlier copy of it.
- A Table 7 row with the same place of supply and rate replaces the earlier row; a new rate for the same place is added beside it.
- A summary section, Table 12, nil-rated and exempt supplies or advances, is replaced whole by the later upload.
- A document the later file does not carry stays as it was. An upload adds and replaces; it does not remove.
fynxIQ holds its own file to those rules before the download
fynxIQ’s part comes before there is a file to upload. The engine holds every field of the JSON it builds against the offline tool’s rules and then against GSTN’s own schema for the GSTR-1 JSON, which the portal refuses a file for breaking (Error in JSON structure validation). The File it step gives the verdict in numbers, so many fields in so many tables, and lists any field the upload would refuse by its place in the JSON, such as b2b[2].inv[0].idt, with the reason. Such a field is a blocker: the download stays closed until it is fixed in the file it was read from, because the JSON is rebuilt from your files on every run.
The same run holds the download for a document number that describes two documents, a buyer that is your own registration, an empty B2B tab in Table 12 beside B2B supplies, and an HSN code that cannot exist: one that is not four, six or eight digits, one in chapter 00 or 77, or a subheading missing from a heading fynxIQ lists in full, which today means 7113 to 7118 and 9506. A missing Table 13 holds it too when your files carry the invoice numbers to build one from. A return read whole from a ready-to-file workbook with no invoice numbers gets a warning instead, and Table 13 is filled on the portal before filing.
A buyer GSTIN that fails its check digit never reaches the file. The invoice is reported as a sale to a consumer and a warning names it; type the registration that was meant and it goes back to Table 4 with the buyer named, or say it was a consumer sale. Your register is not changed either way.
What it cannot tell you, it says. A check digit proves a GSTIN is well formed, not that it was issued or is still active; fynxIQ’s checks read the return alone, not the portal, so a cancelled buyer registration passes every check here. Outside the headings it lists, it says nothing about whether an HSN code is on the portal’s list. Document numbers are checked inside the return being prepared, not against what the portal holds for earlier months. And it cannot see what happened after you uploaded, so the error report is yours to read.
A JSON from another product can be checked for free
The free GSTR-1 JSON validator takes a file from Tally, Busy, Marg or any other product and holds it against the same offline tool rules fynxIQ runs on its own output. It also checks each document’s tax heads against its place of supply, and whether Table 12 accounts for the same supplies as the rest of the return, in total and by its B2B and B2C halves, to the paisa. The file is read in your browser tab and sent nowhere, and closing the tab forgets it. There is no account to make.
Those are the only checks it runs. It does not say whether a rate suits the HSN or whether every invoice number falls in a declared Table 13 series, and a finished JSON no longer carries the files it was built from, so it cannot hold the totals against the marketplaces’ TCS statement. All of those run when the return is prepared on fynxIQ.
Try it on your own figures with the free GSTR-1 JSON validator.
Which file to download, and from where: the list for each marketplace and the GST portal.
By Raunak Pathak, founder of fynxIQ, who files GST returns on it. Last updated 4 October 2026. This is general information about how GST returns work, not advice about your particular return.