Docs
Quickstart
From zero to a verified GSTIN in three steps. No sales call, no minimum.
Get a test key
Sign up with your email. The dashboard opens with a test key (
as_test_…) and ₹100 of demo credit — no card, no company form.Test keys run against fictional sandbox data and are never billed. Signed in? Every snippet in these docs already uses your key.Make your first call
Verify a GSTIN. Swap in any language — your choice is remembered across the site.
POST /v1/gst/verifycurl https://api.apiserver.in/v1/gst/verify \ -H "Authorization: Bearer as_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"gstin":"29AAJCK4821M1Z1"}'const res = await fetch("https://api.apiserver.in/v1/gst/verify", { method: "POST", headers: { Authorization: `Bearer ${process.env.APISERVER_KEY ?? "as_test_YOUR_KEY"}`, "Content-Type": "application/json", }, body: JSON.stringify({ "gstin": "29AAJCK4821M1Z1" }), }); const { success, data, meta, error } = await res.json(); console.log(meta.charged, meta.amount_inr); // failed calls are never chargedimport os, requests res = requests.post( "https://api.apiserver.in/v1/gst/verify", headers={ "Authorization": f"Bearer {os.getenv('APISERVER_KEY', 'as_test_YOUR_KEY')}", }, json={ "gstin": "29AAJCK4821M1Z1", }, timeout=10, ) body = res.json() print(body["meta"]["charged"], body["meta"]["amount_inr"])<?php $ch = curl_init('https://api.apiserver.in/v1/gst/verify'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . (getenv('APISERVER_KEY') ?: 'as_test_YOUR_KEY'), 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'gstin' => '29AAJCK4821M1Z1', ]), ]); $body = json_decode(curl_exec($ch), true); echo $body['meta']['charged'] ? 'charged' : 'not charged';Production base URL is
https://api.apiserver.in. In this prototype the same API runs at/api/v1/…on this site — the playground uses it.Read the response
Every endpoint returns the same envelope.
dataholds the normalized result;metatells you what it cost and how fresh it is.200 OK{ "success": true, "request_id": "as_req_01J9X2K7R8M4V6T2Q9W3E5Y1ZB", "api": "gst.verify", "version": "2026-10-01", "data": { "gstin": "29AAJCK4821M1Z1", "legal_name": "KAVERI TEXTILES PRIVATE LIMITED", "trade_name": "Kaveri Textiles", "status": "Active", "registration_date": "2017-07-01", "cancellation_date": null, "taxpayer_type": "Regular", "constitution": "Private Limited Company", "state": "Karnataka", "state_code": "29", "pan": "AAJCK4821M", "principal_place": { "line1": "No. 14, 3rd Cross, Phase II", "locality": "Peenya Industrial Area", "city": "Bengaluru", "district": "Bengaluru Urban", "state": "Karnataka", "pincode": "560058" }, "nature_of_business": [ "Manufacturing", "Wholesale Business" ], "einvoice_enabled": true }, "meta": { "charged": true, "amount_inr": 0.75, "latency_ms": 284, "source_status": "live", "attempts": 1, "data_as_of": "2026-10-03T09:12:00+05:30", "mode": "live" } }meta.chargedistrueonly for successful calls. Failures, timeouts and not-found are alwaysfalsewithamount_inr: 0.
Next steps
- Business360 & modules — every check in one call, billed per module.
- Errors & billing — what each error means and why it costs ₹0.
- Sandbox & test IDs — sample entities and failure scenarios to build against.