GST Verification with OTP
Business & KYBConsented GST pull: OTP to the registered mobile, then the complete profile and filing history.
With the taxpayer's OTP consent, fetch the full GST profile — registration details, principal and additional places of emver, filing frequency and return history — for a deeper KYB than the public lookup allows.
Endpoint
Request parameters
| Field | Type | Description |
|---|---|---|
gstin
required
|
string | GSTIN |
otp
optional
|
string | OTP (second step) |
Example request
curl -X POST https://app.emver.io/api/sandbox/v1/gst-otp-verification \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"gstin": "string",
"otp": "string"
}'
import requests
response = requests.post(
"https://app.emver.io/api/sandbox/v1/gst-otp-verification",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
},
json={
"gstin": "string",
"otp": "string"
},
timeout=60,
)
response.raise_for_status()
data = response.json()
const response = await fetch("https://app.emver.io/api/sandbox/v1/gst-otp-verification", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
},
body: JSON.stringify({
"gstin": "string",
"otp": "string"
}),
});
const data = await response.json();
$response = Http::withToken('YOUR_API_KEY')
->acceptJson()
->post('https://app.emver.io/api/sandbox/v1/gst-otp-verification', {
"gstin": "string",
"otp": "string"
});
$data = $response->json();
Replace YOUR_API_KEY and the placeholder values. Use the switch above to see production URLs.
Response
Structure · 200
{
"status": INTEGER,
"message": STRING,
"data": {
"legal_name": STRING,
"trade_name": STRING,
"places_of_business": ARRAY,
"filing_frequency": STRING,
"returns": ARRAY,
"turnover_band": STRING
}
}
Example · 200
{
"status": 200,
"message": "string",
"data": {
"legal_name": "string",
"trade_name": "string",
"places_of_business": "string",
"filing_frequency": "string",
"returns": "string",
"turnover_band": "string"
}
}
Error · 4xx / 5xx
{
"status": INTEGER,
"message": STRING
}
See Errors & status codes for what each status means and which calls are billed.
About this API
Start the flow with the GSTIN; an OTP goes to the mobile registered with GST. Once the taxpayer confirms it, the API returns the detailed profile and up to the last 24 months of return filings, the basis for turnover-linked credit decisions.
Typical uses
- MSME lending. Underwrite on filed returns instead of self-declared turnover.
- Supplier onboarding. Confirm compliance before large contracts.
Questions
- How is this different from GSTIN Verification?
- GSTIN Verification uses public data and needs no consent. This flow needs the taxpayer's OTP and returns the detailed profile and filing history.