GSTR-9 Annual Return API

File GSTR-9 annual return programmatically. Auto-rolls monthly GSTR-1 + 3B data into the annual summary tables.

Get sandbox keys → View OpenAPI docs Talk to sales

What is the GSTR-9 Annual Return API?

GSTR-9 is the annual GST return reconciling monthly filings against books of accounts. The WhiteBooks GSTR-9 Filing API accepts the 19-table annual summary JSON and submits to GSTN. It also offers a roll-up helper that pre-fills GSTR-9 tables from your monthly GSTR-1 / GSTR-3B filings.

For taxpayers with turnover above INR 5 Cr (GSTR-9C also required), the API exposes a companion endpoint that accepts the audit reconciliation statement and routes both filings together.

Quick spec

Code examples

curl Node.jsPythonJava
curl -X POST 'https://apisandbox.whitebooks.in/gst/api/v1/gstr9/file' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{ /* payload */ }'
Node.js
const res = await fetch('https://apisandbox.whitebooks.in/gst/api/v1/gstr9/file', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(payload),
});
const data = await res.json();
Python
import requests

resp = requests.post(
    'https://apisandbox.whitebooks.in/gst/api/v1/gstr9/file',
    headers={'Authorization': f'Bearer {access_token}'},
    json=payload,
)
data = resp.json()
Java
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://apisandbox.whitebooks.in/gst/api/v1/gstr9/file"))
    .header("Authorization", "Bearer " + accessToken)
    .header("Content-Type", "application/json")
    .post(BodyPublishers.ofString(payload))
    .build();
HttpResponse<String> resp = HttpClient.newHttpClient()
    .send(req, BodyHandlers.ofString());

Integrate in 3 steps

  1. Sign up at accounts.whitebooks.in — sandbox credentials issued instantly, no sales gate.
  2. Make your first call against the sandbox base URL using the code example above. Validate against your local model.
  3. Move to production once your tests pass — switch host to https://api.whitebooks.in/gst. Same payload, same response shape.

Frequently asked questions

Does the API support GSTR-9C reconciliation statement?

Yes — POST /api/v1/gstr9c/file for the audit reconciliation (mandatory above INR 5 Cr turnover).

Can I roll up monthly data automatically?

Yes. Use POST /api/v1/gstr9/rollup with FY identifier to pre-populate annual tables from filed GSTR-1 + GSTR-3B.

What is the filing deadline?

31 December of the year following the financial year (i.e., FY 2024-25 GSTR-9 is due 31-Dec-2025).

Is amendment supported?

GSTN does not currently support GSTR-9 amendments. Errors must be carried forward to the next FY.

Explore the full GST API

This is one endpoint inside the WhiteBooks GST API suite. See the full documentation — every endpoint, every parameter, every error code.

Open the GST API page →

Related GST API endpoints

GSTR-1 Filing API → GSTR-2B Fetch API → GSTR-3B Filing API → GSTR-2B Reconciliation API →