GST returns
GSTR-1 with every invoice behind every number. GSTR-3B with output tax, input credit and reverse charge. GSTR-2B matched against your purchase bills, line by line.
Connect each product once. Every invoice, payment, refund and bank settlement reports itself, is checked the moment it arrives, and becomes your GSTR-1, GSTR-3B, TDS and month-end books. You and your CA work from one place.
cover every sale, credit note, payment, refund, settlement, expense and payout a product makes.
to your documents. Each one is kept as a frozen copy of what your product issued.
is the unit, end to end. Money is whole paise everywhere, so nothing drifts by rounding.
for a rate, threshold or due date shows the law or notification it comes from.
Your products already know every sale they make. AgentKuber listens, checks and keeps the books from the same facts.
A developer adds a small outbox to each product. When an invoice, credit note, payment, refund or settlement happens, the product posts it here, signed with its own key.
POST /api/v1/eventsThe document is stored exactly as issued. Tax arithmetic, place of supply, GSTIN check digits, missing numbers and duplicates are tested straight away. Anything wrong becomes an issue that says what to do.
The double-entry journal, GSTR-1 and GSTR-3B workings, TDS, gateway fees and their input credit are all derived from those same records.
Review, file on the GST portal, mark it filed. The month locks, so nobody can change a figure that has gone to the government.
Every area works on the same records, so the sales register, the GST return and the profit and loss account always agree.
GSTR-1 with every invoice behind every number. GSTR-3B with output tax, input credit and reverse charge. GSTR-2B matched against your purchase bills, line by line.
Every due date for every company and GSTIN: GST, TDS, advance tax, annual filings. Each one names the rule it comes from.
Deduction on each bill and payout, challans, quarterly statements, and a watch on every payee's yearly total against the threshold.
A double-entry journal written from your documents. Trial balance, profit and loss, balance sheet, ledgers and month close.
Import a statement and match it. Gateway settlements tie to bank credits by UTR: payments, less fees, less refunds, equals what reached the bank.
Purchase bills with input credit and TDS worked out, vendors, and reverse-charge self-invoices with payment vouchers. Add your own Anthropic API key and an uploaded bill fills in its own form.
A morning list instead of a hunt: the things only a human can settle, each with the record it is about and what to do next.
Registration certificates, deeds, filed returns, challans and bank statements. Encrypted, with a checklist of what each company should hold.
Advance-tax instalments and year-end workings, by the kind of entity: firm, LLP, company or proprietor.
One download with the registers, ledgers and workings your CA asks for, for any month, quarter or year.
Also inside: a fixed-asset register, payouts to affiliates and contractors, an audit trail nobody can edit, Excel and CSV exports from every list, and a morning reminder by e-mail and WhatsApp of what is overdue and what falls due this week.
GSTR-1 laid out the way the GST portal asks for it, and every figure opens the invoices behind it.
Screens show sample data from a made-up business.

Today, this week, month end and year end: the tasks that are due and the figures that do not add up yet.
Screens show sample data from a made-up business.

The compliance calendar builds itself from each company's registrations and what kind of entity it is.
Screens show sample data from a made-up business.

Invoices, credit notes and vouchers from every product in one register, filtered by company, product, state or month.
Screens show sample data from a made-up business.

Each product has its own keys, event log and health: when it last reported, what was refused and why.
Screens show sample data from a made-up business.

Seven endpoints and eight event types. The documentation is written to be handed to a developer, or to an AI coding assistant, exactly as it is.
import hashlib, hmac, json, os, time, urllib.request
def send(event: dict) -> dict:
body = json.dumps(event, separators=(",", ":")).encode()
ts = str(int(time.time()))
sig = hmac.new(os.environ["FINANCE_PORTAL_SECRET"].encode(),
ts.encode() + b"." + body, hashlib.sha256).hexdigest()
req = urllib.request.Request(
os.environ["FINANCE_PORTAL_URL"] + "/api/v1/events", data=body, method="POST",
headers={"X-FP-Key": os.environ["FINANCE_PORTAL_KEY"], "X-FP-Timestamp": ts,
"X-FP-Signature": sig, "Content-Type": "application/json"})
return json.load(urllib.request.urlopen(req, timeout=20))
send({"event_id": "doc:INV/2627/00517", "type": "document.issued", "data": invoice})
import { createHmac } from "node:crypto";
export async function send(event) {
const body = JSON.stringify(event);
const ts = String(Math.floor(Date.now() / 1000));
const sig = createHmac("sha256", process.env.FINANCE_PORTAL_SECRET)
.update(`${ts}.${body}`).digest("hex");
const res = await fetch(process.env.FINANCE_PORTAL_URL + "/api/v1/events", {
method: "POST", body,
headers: { "X-FP-Key": process.env.FINANCE_PORTAL_KEY, "X-FP-Timestamp": ts,
"X-FP-Signature": sig, "Content-Type": "application/json" },
});
return res.json();
}
await send({ event_id: "doc:INV/2627/00517", type: "document.issued", data: invoice });
function send(array $event): array {
$body = json_encode($event, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$ts = (string) time();
$sig = hash_hmac('sha256', $ts . '.' . $body, getenv('FINANCE_PORTAL_SECRET'));
$ch = curl_init(getenv('FINANCE_PORTAL_URL') . '/api/v1/events');
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-FP-Key: ' . getenv('FINANCE_PORTAL_KEY'), 'X-FP-Timestamp: ' . $ts,
'X-FP-Signature: ' . $sig, 'Content-Type: application/json'],
]);
return json_decode(curl_exec($ch), true);
}
send(['event_id' => 'doc:INV/2627/00517', 'type' => 'document.issued', 'data' => $invoice]);
Your accountant signs in to the same books you see, with exactly the access you give.
For everyone, your products included. A filed figure cannot move; a late invoice is carried into the next open month and flagged.
Engage a CA for a single firm, or let your finance head see the whole group. Access is set per person, per company.
Who did what, and when, in a trail that cannot be edited. Notes and questions sit on the record they are about.
So the protections are part of how AgentKuber is built, not settings you have to find.
Every uploaded bill, certificate and statement is encrypted with AES-256-GCM before it reaches the disk.
Authenticator-app codes for every person who wants them. Passwords are kept only as argon2id hashes.
Products never send a password. Each request is signed and time-stamped, and refused after five minutes.
The database itself refuses to change or delete an audit row, whoever asks.
Your records are filed under your organisation and every screen checks it. API secrets and service keys are stored encrypted.
A backup is taken nightly, encrypted, and copied to a second location.
Indian businesses that sell through their own software: apps, SaaS, online stores, marketplaces. It suits a founder with one product as well as a group with several companies and GSTINs. Your CA uses the same account.
No. It prepares them: every figure, with the documents behind it, in the layout of the return. You or your CA file on the government portal, then mark the return as filed here so the month locks.
No. Your product keeps issuing its own invoices and credit notes. AgentKuber stores a frozen copy of each one and never edits it.
If your product does not issue proper GST documents yet, the API documentation lists what it needs first.
An outbox table, a small sender job and a daily checkpoint. The API documentation has the signing code in Python, PHP and Node, every event with a full example, and the checklist to tick before going live.
Yes. Every product starts with a test key. Test data lives in a sandbox, appears in no report, and never posts to the books. The live key comes when the test data matches your own numbers.
Any. Your product reports payments, refunds and settlements in one common shape. Razorpay's own fields map across directly, and cash on delivery and direct bank receipts are covered too.
Yes. Each company has its own PAN, GSTINs, books and documents. Look at one company or the whole group, and give each person access to the companies they need.
Enter them here. Purchase bills, vendors, reverse charge, TDS, bank statements and fixed assets are all handled inside AgentKuber.
Yes. Every list exports to Excel and CSV, and the CA pack downloads the registers, ledgers and workings for any period.
Create your account, add a company, and connect your first product in the sandbox.