Business360
GST, PAN, company master and directors in one call.
POST/v1/business360
What it does
Send any one identifier. Business360 resolves the rest, runs every module in parallel with source fallback, and returns one normalized profile with risk flags. Pick modules with include, pay only for the ones that succeed.
- Input
- GSTIN, CIN or PAN
- Output
- Combined profile + risk flags
Use cases
- Vendor and supplier onboarding
- Marketplace seller KYB
- Credit and underwriting pre-checks
- Periodic re-verification
Request
POST /v1/business360
curl https://api.apiserver.in/v1/business360 \
-H "Authorization: Bearer as_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"gstin":"29AAJCK4821M1Z1","include":["gst","gst_returns","pan","company","directors","cin_pan"]}'const res = await fetch("https://api.apiserver.in/v1/business360", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APISERVER_KEY ?? "as_test_YOUR_KEY"}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"gstin": "29AAJCK4821M1Z1",
"include": [
"gst",
"gst_returns",
"pan",
"company",
"directors",
"cin_pan"
]
}),
});
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/business360",
headers={
"Authorization": f"Bearer {os.getenv('APISERVER_KEY', 'as_test_YOUR_KEY')}",
},
json={
"gstin": "29AAJCK4821M1Z1",
"include": ["gst", "gst_returns", "pan", "company", "directors", "cin_pan"],
},
timeout=10,
)
body = res.json()
print(body["meta"]["charged"], body["meta"]["amount_inr"])<?php
$ch = curl_init('https://api.apiserver.in/v1/business360');
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',
'include' => ['gst', 'gst_returns', 'pan', 'company', 'directors', 'cin_pan'],
]),
]);
$body = json_decode(curl_exec($ch), true);
echo $body['meta']['charged'] ? 'charged' : 'not charged';| Field | Type | Description |
|---|---|---|
| gstin | string | 15-character GSTIN. Validated locally (state code, embedded PAN, mod-36 checksum) before any source is called. |
| cin | string | 21-character Corporate Identification Number. |
| pan | string | 10-character PAN. The 4th character encodes the holder type. |
| include | "gst" | "gst_returns" | "pan" | "company" | "directors" | "cin_pan"[] | Modules to run. Omit for the full bundle. Each module is billed at its single-API price only if it succeeds; the total never exceeds the bundle price. |
Response
Sample response for a fictional sandbox entity. Click any key to copy its JSON path.
{ : true, : "as_req_01J9X2K7R8M4V6T2Q9W3E5Y1ZB", : "business360", : "2026-10-01", : { : { : "KAVERI TEXTILES PRIVATE LIMITED", : "Kaveri Textiles", : "company", : "AAJCK4821M", : "29AAJCK4821M1Z1", : "U17120KA2016PTC094312", : null, : "Karnataka", : { : "low", : [] } }, : { : "ok", : { : "29AAJCK4821M1Z1", : "KAVERI TEXTILES PRIVATE LIMITED", : "Kaveri Textiles", : "Active", : "2017-07-01", : null, : "Regular", : "Private Limited Company", : "Karnataka", : "29", : "AAJCK4821M", : { : "No. 14, 3rd Cross, Phase II", : "Peenya Industrial Area", : "Bengaluru", : "Bengaluru Urban", : "Karnataka", : "560058" }, : [ "Manufacturing", "Wholesale Business" ], : true }, : true, : 0.75, : 1, : 300 }, : { : "ok", : { : "29AAJCK4821M1Z1", : "monthly", : [ { : "2026-08", : { : "filed", : "2026-09-10", : "2026-09-11" }, : { : "filed", : "2026-09-18", : "2026-09-20" } }, { : "2026-07", : { : "filed", : "2026-08-10", : "2026-08-11" }, : { : "filed", : "2026-08-18", : "2026-08-20" } }, { : "2026-06", : { : "filed", : "2026-07-10", : "2026-07-11" }, : { : "filed", : "2026-07-18", : "2026-07-20" } }, { : "2026-05", : { : "filed", : "2026-06-10", : "2026-06-11" }, : { : "filed", : "2026-06-18", : "2026-06-20" } }, { : "2026-04", : { : "filed", : "2026-05-10", : "2026-05-11" }, : { : "filed", : "2026-05-18", : "2026-05-20" } }, { : "2026-03", : { : "filed", : "2026-04-10", : "2026-04-11" }, : { : "filed", : "2026-04-18", : "2026-04-20" } }, { : "2026-02", : { : "filed", : "2026-03-10", : "2026-03-11" }, : { : "filed", : "2026-03-18", : "2026-03-20" } }, { : "2026-01", : { : "filed", : "2026-02-10", : "2026-02-11" }, : { : "filed", : "2026-02-18", : "2026-02-20" } }, { : "2025-12", : { : "filed", : "2026-01-10", : "2026-01-11" }, : { : "filed", : "2026-01-18", : "2026-01-20" } }, { : "2025-11", : { : "filed", : "2025-12-10", : "2025-12-11" }, : { : "filed", : "2025-12-18", : "2025-12-20" } }, { : "2025-10", : { : "filed", : "2025-11-10", : "2025-11-11" }, : { : "filed", : "2025-11-18", : "2025-11-20" } }, { : "2025-09", : { : "filed", : "2025-10-10", : "2025-10-11" }, : { : "filed", : "2025-10-18", : "2025-10-20" } } ], : { : 12, : 24, : 0, : 0, : "2026-08" } }, : true, : 1, : 1, : 337 }, : { : "ok", : { : "AAJCK4821M", : true, : "Valid", : "Company", : "KAVERI TEXTILES PRIVATE LIMITED", : null }, : true, : 2, : 1, : 374 }, : { : "ok", : { : "company", : "U17120KA2016PTC094312", : null, : "KAVERI TEXTILES PRIVATE LIMITED", : "Active", : "Private", : "Company limited by shares", : "Non-government company", : "2016-05-12", : "RoC-Bengaluru", : "Unlisted", : 5000000, : 3250000, : { : "17120", : "Textiles" }, : "2025-09-26", : "2025-03-31", : { : "No. 14, 3rd Cross, Phase II", : "Peenya Industrial Area", : "Bengaluru", : "Bengaluru Urban", : "Karnataka", : "560058" } }, : true, : 3.5, : 1, : 411 }, : { : "ok", : { : "U17120KA2016PTC094312", : null, : "KAVERI TEXTILES PRIVATE LIMITED", : 3, : 2, : [ { : "07419266", : "Anand Raghavan", : "Managing Director", : "2016-05-12", : null, : "Approved" }, { : "08133570", : "Kavitha Subramanian", : "Director", : "2018-04-02", : null, : "Approved" }, { : "06522419", : "Prakash Iyer", : "Director", : "2016-05-12", : "2021-03-31", : "Approved" } ] }, : true, : 4, : 1, : 448 }, : { : "ok", : { : "U17120KA2016PTC094312", : null, : "AAJCK4821M", : "KAVERI TEXTILES PRIVATE LIMITED", : "cin_to_pan" }, : true, : 3.5, : 1, : 485 } }, : { : true, : 10, : 612, : "live", : 6, : "2026-10-03T09:12:00+05:30", : "live", : 6, : 6, : { : 14.75, : 10, : 4.75 } }}Field dictionary — data
| Field | Type | Description |
|---|---|---|
| summary | object | — |
| ↳legal_name | string | null | — |
| ↳trade_name | string | null | — |
| ↳entity_type | "company" | "llp" | "proprietorship" | null | — |
| ↳pan | string | null | — |
| ↳gstin | string | null | — |
| ↳cin | string | null | — |
| ↳llpin | string | null | — |
| ↳state | string | null | — |
| ↳risk | object | — |
| gst | object | — |
| ↳status | "ok" | "failed" | "not_found" | "skipped" | — |
| ↳data | object | null | — |
| ↳error | object | — |
| ↳reason | string | Why a module was skipped |
| ↳charged | boolean | — |
| ↳amount_inr | number | — |
| ↳attempts | integer | — |
| ↳latency_ms | integer | — |
| gst_returns | object | — |
| ↳status | "ok" | "failed" | "not_found" | "skipped" | — |
| ↳data | object | null | — |
| ↳error | object | — |
| ↳reason | string | Why a module was skipped |
| ↳charged | boolean | — |
| ↳amount_inr | number | — |
| ↳attempts | integer | — |
| ↳latency_ms | integer | — |
| pan | object | — |
| ↳status | "ok" | "failed" | "not_found" | "skipped" | — |
| ↳data | object | null | — |
| ↳error | object | — |
| ↳reason | string | Why a module was skipped |
| ↳charged | boolean | — |
| ↳amount_inr | number | — |
| ↳attempts | integer | — |
| ↳latency_ms | integer | — |
| company | object | — |
| ↳status | "ok" | "failed" | "not_found" | "skipped" | — |
| ↳data | object | null | — |
| ↳error | object | — |
| ↳reason | string | Why a module was skipped |
| ↳charged | boolean | — |
| ↳amount_inr | number | — |
| ↳attempts | integer | — |
| ↳latency_ms | integer | — |
| directors | object | — |
| ↳status | "ok" | "failed" | "not_found" | "skipped" | — |
| ↳data | object | null | — |
| ↳error | object | — |
| ↳reason | string | Why a module was skipped |
| ↳charged | boolean | — |
| ↳amount_inr | number | — |
| ↳attempts | integer | — |
| ↳latency_ms | integer | — |
| cin_pan | object | — |
| ↳status | "ok" | "failed" | "not_found" | "skipped" | — |
| ↳data | object | null | — |
| ↳error | object | — |
| ↳reason | string | Why a module was skipped |
| ↳charged | boolean | — |
| ↳amount_inr | number | — |
| ↳attempts | integer | — |
| ↳latency_ms | integer | — |
Errors
Every error uses the same envelope and is billed ₹0 — `meta.charged` is always false.
| HTTP | Code | What it means | Retry | Billed |
|---|---|---|---|---|
| 400 | VALIDATION_FAILED | Something in the request isn't in the right shape — usually an ID with a typo or a missing field. | no | ₹0 |
| 401 | AUTH_INVALID_KEY | We couldn't find a valid API key on this request. | no | ₹0 |
| 402 | WALLET_INSUFFICIENT_BALANCE | Your wallet doesn't have enough for this call, so we didn't run it. | no | ₹0 |
| 404 | RECORD_NOT_FOUND | The source has no record for this ID. | no | ₹0 |
| 429 | RATE_LIMITED | You sent requests faster than your key's limit. | yes | ₹0 |
| 503 | PROVIDER_UNAVAILABLE | All upstream sources for this check were down, even after fallback. | yes | ₹0 |
| 504 | PROVIDER_TIMEOUT | The upstream source took too long to answer. | yes | ₹0 |
₹10.00
Business360 · incl. GST · failed calls ₹0