A REST API over the same engine as the dashboard: same checks, same credit balance, same audit trail. Create a key under Account → API keys.
Every request carries a personal access token as a bearer credential. Tokens are shown once at creation — store them in your secret manager, not in source control.
curl https://businesskyc.com/api/v1/me \
-H "Authorization: Bearer bkyc_your_token_here" \
-H "Accept: application/json"
/api/v1/me
Returns the authenticated account and its current credit balance.
{
"data": {
"id": 12,
"name": "Ananya Raghavan",
"email": "ananya@example.com",
"company_name": "Sample Traders Pvt Ltd",
"credits_balance": 480
}
}
/api/v1/services
Returns every active check with its credit cost and the fields it expects, so you can build request payloads dynamically.
{
"data": [
{
"code": "gstin_verify",
"name": "GSTIN verification",
"group": "business",
"credit_cost": 2,
"fields": [
{ "key": "gstin", "label": "GSTIN", "rules": "required|string|size:15" }
]
}
]
}
/api/v1/verify/{code}
Charges the credit cost, calls the source and returns the normalised result. The token needs the "verify" ability.
curl -X POST https://businesskyc.com/api/v1/verify/gstin_verify \
-H "Authorization: Bearer bkyc_your_token_here" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"gstin":"33AABCS1429B1ZP"}'
credits_balance reflects the balance after this call, so you never need a second request to track spend.
{
"data": {
"reference": "BK-8F2A1C4D9E",
"service": "gstin_verify",
"status": "success",
"credits_charged": 2,
"credits_balance": 478,
"input": { "gstin": "33AABCS1429B1ZP" },
"result": {
"gstin": "33AABCS1429B1ZP",
"legal_name": "Sample Traders Private Limited",
"status": "Active",
"state": "Tamil Nadu",
"registration_date": "2019-07-12"
},
"error": null,
"duration_ms": 184,
"created_at": "2026-08-12T10:41:07+05:30"
}
}
Standard HTTP status codes. A failed check still returns its reference so you can reconcile it later.
| Status | Meaning | Credits charged |
|---|---|---|
401 |
Missing, revoked or malformed token | No |
403 |
Token lacks the "verify" ability, or the account is suspended | No |
402 |
Insufficient credits — top up and retry | No |
422 |
Validation failed, or the check returned no record | Only for "no record" |
429 |
Rate limit exceeded (60 requests per minute) | No |
500 |
Upstream provider error — credits are refunded automatically | Refunded |
Ready to build?
Create an account