Finance template
India GST Tax Invoice
CGST Rules 2017 Rule 46 compliant tax invoice. Renders CGST + SGST for intra-state supplies or IGST for inter-state, per-line HSN/SAC codes, place-of-supply block.
Pro, Business & Scale plansCountry: INLanguage: enIN-GST
slug: in-gst-invoiceRendered with sample data
01
Quick start
Reference the template by its slug and pass your data. The same call works from any language; pick whichever fits your stack. Replace $KAMY_API_KEY with a key from the dashboard.
curl
curl https://kamy.dev/api/v1/render \
-H "Authorization: Bearer $KAMY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateSlug": "in-gst-invoice",
"data": {
"invoiceNumber": "GST/2026-27/0148",
"issueDate": "2026-04-15",
"irn": "8a4f9c7e2b1d6f3e5a8b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f",
"currency": "INR",
"supplyType": "intra-state",
"isInterState": false,
"reverseCharge": false,
"placeOfSupply": {
"state": "Karnataka",
"stateCode": "29"
},
"supplier": {
"name": "Bengaluru Software Services Pvt. Ltd.",
"gstin": "29ABCDE1234F1Z5",
"address": [
"6th Floor, Embassy Tech Square",
"Bellandur, Bengaluru, KA 560103"
],
"email": "[email protected]",
"bankAccount": "00112233445566",
"ifsc": "HDFC0001234"
},
"recipient": {
"name": "Mysore Tech Innovations Pvt. Ltd.",
"gstin": "29FGHIJ5678K2Z9",
"address": [
"Plot 14, Hebbal Industrial Area",
// …
}
}'node.js
import { Kamy } from "@kamydev/sdk";
const kamy = new Kamy({ apiKey: process.env.KAMY_API_KEY! });
const { url } = await kamy.render({
templateSlug: "in-gst-invoice",
data: {
"invoiceNumber": "GST/2026-27/0148",
"issueDate": "2026-04-15",
"irn": "8a4f9c7e2b1d6f3e5a8b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f",
"currency": "INR",
"supplyType": "intra-state",
"isInterState": false,
"reverseCharge": false,
"placeOfSupply": {
"state": "Karnataka",
"stateCode": "29"
},
"supplier": {
"name": "Bengaluru Software Services Pvt. Ltd.",
"gstin": "29ABCDE1234F1Z5",
"address": [
"6th Floor, Embassy Tech Square",
"Bellandur, Bengaluru, KA 560103"
],
"email": "[email protected]",
"bankAccount": "00112233445566",
"ifsc": "HDFC0001234"
},
"recipient": {
"name": "Mysore Tech Innovations Pvt. Ltd.",
"gstin": "29FGHIJ5678K2Z9",
"address": [
"Plot 14, Hebbal Industrial Area",
// …
},
});
console.log(url); // signed URL, valid for 1 hourpython
import os, requests
resp = requests.post(
"https://kamy.dev/api/v1/render",
headers={"Authorization": f"Bearer {os.environ['KAMY_API_KEY']}"},
json={
"templateSlug": "in-gst-invoice",
"data": {
"invoiceNumber": "GST/2026-27/0148",
"issueDate": "2026-04-15",
"irn": "8a4f9c7e2b1d6f3e5a8b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f",
"currency": "INR",
"supplyType": "intra-state",
"isInterState": false,
"reverseCharge": false,
"placeOfSupply": {
"state": "Karnataka",
"stateCode": "29"
},
"supplier": {
"name": "Bengaluru Software Services Pvt. Ltd.",
"gstin": "29ABCDE1234F1Z5",
"address": [
"6th Floor, Embassy Tech Square",
"Bellandur, Bengaluru, KA 560103"
],
"email": "[email protected]",
"bankAccount": "00112233445566",
"ifsc": "HDFC0001234"
},
"recipient": {
"name": "Mysore Tech Innovations Pvt. Ltd.",
"gstin": "29FGHIJ5678K2Z9",
"address": [
"Plot 14, Hebbal Industrial Area",
// …
},
},
)
resp.raise_for_status()
print(resp.json()["url"])02
Sample payload
The full sample data the live preview above renders from. Use it as a starting point for your own integration — every field is optional except those marked required in the schema below.
json
{
"invoiceNumber": "GST/2026-27/0148",
"issueDate": "2026-04-15",
"irn": "8a4f9c7e2b1d6f3e5a8b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f6a7b9c2d1e4f",
"currency": "INR",
"supplyType": "intra-state",
"isInterState": false,
"reverseCharge": false,
"placeOfSupply": {
"state": "Karnataka",
"stateCode": "29"
},
"supplier": {
"name": "Bengaluru Software Services Pvt. Ltd.",
"gstin": "29ABCDE1234F1Z5",
"address": [
"6th Floor, Embassy Tech Square",
"Bellandur, Bengaluru, KA 560103"
],
"email": "[email protected]",
"bankAccount": "00112233445566",
"ifsc": "HDFC0001234"
},
"recipient": {
"name": "Mysore Tech Innovations Pvt. Ltd.",
"gstin": "29FGHIJ5678K2Z9",
"address": [
"Plot 14, Hebbal Industrial Area",
"Mysuru, KA 570016"
],
"email": "[email protected]"
},
"lineItems": [
{
"description": "ERP customization · April 2026",
"hsn": "998313",
"quantity": 1,
"unitPrice": 250000,
"taxableValue": 250000,
"cgstRate": 9,
"cgstAmount": 22500,
"sgstRate": 9,
"sgstAmount": 22500,
"lineTotal": 295000
},
{
"description": "Quarterly support retainer",
"hsn": "998313",
"quantity": 1,
"unitPrice": 60000,
"taxableValue": 60000,
"cgstRate": 9,
"cgstAmount": 5400,
"sgstRate": 9,
"sgstAmount": 5400,
"lineTotal": 70800
}
],
"taxableValue": 310000,
"totalCgst": 27900,
"totalSgst": 27900,
"total": 365800,
"paymentTerms": "Net 30 from issue date.",
"notes": "Intra-state supply — CGST 9% + SGST 9% (total GST 18%) per Schedule III."
}03
JSON Schema
The render endpoint validates your payload against this JSON Schema before queuing the render. Validation errors come back with HTTP 400 and a VALIDATION_FAILED code listing every offending path.
json
{
"type": "object",
"required": [
"invoiceNumber",
"issueDate",
"supplier",
"recipient",
"supplyType",
"isInterState",
"placeOfSupply",
"lineItems",
"taxableValue",
"total"
],
"properties": {
"invoiceNumber": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"issueDate": {
"type": "string"
},
"irn": {
"type": "string"
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"supplyType": {
"type": "string",
"enum": [
"intra-state",
"inter-state"
]
},
"isInterState": {
"type": "boolean"
},
"reverseCharge": {
"type": "boolean"
},
"placeOfSupply": {
"type": "object",
"required": [
"state",
"stateCode"
],
"properties": {
"state": {
"type": "string"
},
"stateCode": {
"type": "string"
}
}
},
"supplier": {
"type": "object",
"required": [
"name",
"gstin"
],
"properties": {
"name": {
"type": "string"
},
"gstin": {
"type": "string",
"pattern": "^[0-9A-Z]{15}$"
},
"address": {
"type": "array",
"items": {
"type": "string"
}
},
"email": {
"type": "string",
"format": "email"
},
"bankAccount": {
"type": "string"
},
"ifsc": {
"type": "string"
}
}
},
"recipient": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"gstin": {
"type": "string"
},
"address": {
"type": "array",
"items": {
"type": "string"
}
},
"email": {
"type": "string",
"format": "email"
}
}
},
"lineItems": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"description",
"hsn",
"quantity",
"unitPrice",
"taxableValue",
"lineTotal"
],
"properties": {
"description": {
"type": "string"
},
"hsn": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitPrice": {
"type": "number"
},
"taxableValue": {
"type": "number"
},
"cgstRate": {
"type": "number"
},
"cgstAmount": {
"type": "number"
},
"sgstRate": {
"type": "number"
},
"sgstAmount": {
"type": "number"
},
"igstRate": {
"type": "number"
},
"igstAmount": {
"type": "number"
},
"lineTotal": {
"type": "number"
}
}
}
},
"taxableValue": {
"type": "number"
},
"totalCgst": {
"type": "number"
},
"totalSgst": {
"type": "number"
},
"totalIgst": {
"type": "number"
},
"cessAmount": {
"type": "number"
},
"total": {
"type": "number"
},
"notes": {
"type": "string"
},
"paymentTerms": {
"type": "string"
}
}
}