estimate_ stamp_ duty_ and_ registration
Stamp duty + registration for a property purchase in any of India's 28 states and 8 union territories, priced for the buyer, the place, the property type and a first sale, with every surcharge itemised and every unchecked rule flagged.
Endpoint POST https://api.avnester.com/
Parameters
The most-used parameters. Full schema in the OpenAPI document.
propertyValuenumberrequired- Sale consideration in INR.
statestringrequired- Indian state — ISO code ("MH"), URL slug ("maharashtra") or display name ("Maharashtra"); any of the 28 states and 8 union territories. Required: a missing state is a 400, never a default.
citystringoptional- City or town, e.g. "Pune". It decides the rate where the state prices by location (MH, KA, WB, MP, HR) — Pune 7%, Mumbai 6% — and the GST metro carpet cap. Without it the response says what it assumed. An area of a corporation ("Vashi", Navi Mumbai's) prices as the corporation and comes back as location.place.area — send the place as the buyer names it, not the wider city it is listed under.
localBodystringoptional- municipal_corporation | municipal_council | gram_panchayat. Where the property is, in a state that prices by it (MH, KA, WB, MP, HR): gram_panchayat (village), municipal_council (town) or municipal_corporation (city); overrides city. Omit when unknown (a corporation is priced, and said).
buyerGenderstringoptional- male | female | joint. "female" (a woman), "joint" (a man and a woman together) or "male" (default; two women: female). Changes the price only where a state gives women a concession. Overrides the legacy isWomanBuyer.
propertyTypestringoptional- residential | commercial | plot | agricultural. residential (default), plot (bare land; a residential-only concession does not reach it), commercial or agricultural. Agricultural land is priced at the conveyance rate.
firstSalebooleanoptional- True for the FIRST sale of a flat, from the builder (not the buyer's first home); false for a resale. Changes the duty only where a state has a first-sale rate (KA). Omit when unknown: a resale is priced, and said where it matters. Absent: constructionStatus under_construction means a first sale, resale means not, and ready_to_move decides nothing (a ready unit may be a resale).
constructionStatusstringoptional- under_construction | ready_to_move | resale. Adds itemised GST (gst, totalWithGst): 1% (affordable) or 5% under construction, 0% ready or resale. Also decides firstSale when it is absent. Omit and no GST is computed.
carpetAreaSqftnumberoptional- Carpet area in sq ft. With the value, decides the 1% affordable-housing GST rate: up to ₹45 lakh and 646 sq ft carpet in a GST metro city (read from city), 969 sq ft elsewhere.
isUrbanbooleanoptional- Urban (default) or rural — used for the location only when city and localBody are absent.
isWomanBuyerbooleanoptional- Backward-compat shim — prefer buyerGender. true → buyerGender="female".
Worked examples
curl -X POST https://api.avnester.com/public/v1/estimate_stamp_duty_and_registration \
-H 'Content-Type: application/json' \
-d '{
"propertyValue": 6500000,
"state": "TN",
"buyerGender": "female"
}'{
"propertyValue": 6500000,
"state": "TN",
"supported": true,
"stateCode": "TN",
"stateName": "Tamil Nadu",
"stampDuty": 455000,
"stampDutyBase": 455000,
"surcharges": [],
"registrationFee": 130000,
"registrationCapApplied": false,
"total": 585000,
"rateBasis": "Tamil Nadu: 7% stamp + 2% registration.",
"rateVerification": {
"status": "verified",
"lastVerifiedAt": "2026-09-28T00:00:00Z",
"sourceUrl": "https://archive.org/details/in.gazette.tamilnadu.2023-03-30.Extraordinary_109_Part-II_Section-2",
"unverifiedComponents": []
},
"assumptions": [
{
"code": "CONCESSION_NOT_APPLICABLE",
"message": "Tamil Nadu's registration concession for women (1% instead of 2%) covers a property up to ₹10 lakh only, so this is the standard registration fee."
}
],
"rateEffectiveDate": "2025-04-01",
"attribution": "AVnester",
"disclaimer": "..."
}curl -X POST https://api.avnester.com/public/v1/estimate_stamp_duty_and_registration \
-H 'Content-Type: application/json' \
-d '{
"propertyValue": 10000000,
"state": "maharashtra",
"city": "Mumbai",
"buyerGender": "male"
}'{
"propertyValue": 10000000,
"state": "maharashtra",
"supported": true,
"stateCode": "MH",
"stateName": "Maharashtra",
"stampDuty": 600000,
"stampDutyBase": 500000,
"registrationFee": 30000,
"registrationCapApplied": true,
"total": 630000,
"rateBasis": "Maharashtra (Mumbai): 5% stamp + 1% registration (registration capped at ₹30,000); surcharges: Metro surcharge 1%.",
"rateEffectiveDate": "2026-04-01",
"attribution": "AVnester",
"disclaimer": "..."
}curl -X POST https://api.avnester.com/public/v1/estimate_stamp_duty_and_registration \
-H 'Content-Type: application/json' \
-d '{
"propertyValue": 10000000,
"state": "maharashtra",
"city": "Pune",
"buyerGender": "male"
}'{
"propertyValue": 10000000,
"state": "maharashtra",
"supported": true,
"stateCode": "MH",
"stampDuty": 700000,
"stampDutyBase": 500000,
"surcharges": [
{
"name": "Municipal corporation surcharge",
"ratePct": 1,
"amount": 100000,
"legalBasis": "Maharashtra Municipal Corporations Act, s.149A (from 1-4-2013)"
},
{
"name": "Metro surcharge",
"ratePct": 1,
"amount": 100000,
"legalBasis": "Maharashtra Municipal Corporations Act, s.149B; Mumbai Municipal Corporation Act, s.144F (from 8-2-2019)"
}
],
"registrationFee": 30000,
"registrationCapApplied": true,
"total": 730000,
"location": {
"place": { "slug": "pune", "name": "Pune" },
"localBody": "municipal_corporation",
"source": "city",
"assumed": false
},
"attribution": "AVnester",
"disclaimer": "..."
}curl -X POST https://api.avnester.com/public/v1/estimate_stamp_duty_and_registration \
-H 'Content-Type: application/json' \
-d '{
"propertyValue": 5000000,
"state": "Bihar"
}'{
"propertyValue": 5000000,
"state": "Bihar",
"supported": true,
"stateCode": "BR",
"stampDuty": 315000,
"registrationFee": 100000,
"total": 415000,
"rateVerification": {
"status": "unverified",
"lastVerifiedAt": null,
"sourceUrl": "https://state.bihar.gov.in/registration/",
"unverifiedComponents": []
},
"attribution": "AVnester",
"disclaimer": "..."
}curl -X POST https://api.avnester.com/public/v1/estimate_stamp_duty_and_registration \
-H 'Content-Type: application/json' \
-d '{
"propertyValue": 10000000,
"state": "haryana",
"city": "Gurugram",
"buyerGender": "female"
}'{
"propertyValue": 10000000,
"state": "haryana",
"supported": true,
"stateCode": "HR",
"stateName": "Haryana",
"stampDuty": 500000,
"stampDutyBase": 500000,
"surcharges": [],
"registrationFee": 50200,
"registrationCapApplied": false,
"total": 550200,
"rateBasis": "Haryana (Gurgaon): 5% stamp + ₹50,200 registration, a fee by value band incl. ₹200 (woman-buyer rate applied).",
"location": {
"place": { "slug": "gurgaon", "name": "Gurgaon" },
"localBody": "municipal_corporation",
"source": "city",
"assumed": false
},
"rateVerification": {
"status": "verified",
"lastVerifiedAt": "2026-09-24T00:00:00Z",
"sourceUrl": "https://jamabandi.nic.in/Docs/Updatedstampdutyandregistrationfees.pdf",
"unverifiedComponents": []
},
"attribution": "AVnester",
"disclaimer": "..."
}curl -X POST https://api.avnester.com/public/v1/estimate_stamp_duty_and_registration \
-H 'Content-Type: application/json' \
-d '{
"propertyValue": 4000000,
"state": "Karnataka",
"city": "Bengaluru",
"firstSale": true
}'{
"propertyValue": 4000000,
"state": "Karnataka",
"supported": true,
"stateCode": "KA",
"stampDuty": 134400,
"stampDutyBase": 120000,
"surcharges": [
{
"name": "Additional duty",
"ratePct": 0.3,
"amount": 12000,
"legalBasis": "Karnataka Stamp Act 1957, s.3-B (10% of the stamp duty, statewide)"
},
{
"name": "Local-body surcharge",
"ratePct": 0.06,
"amount": 2400,
"legalBasis": "Greater Bengaluru Governance Act 2024, s.170; Karnataka Municipal Corporations Act 1976, s.140; Karnataka Municipalities Act 1964, s.99 (2% of the stamp duty)"
}
],
"registrationFee": 80000,
"total": 214400,
"rateBasis": "Karnataka (Bengaluru): 3% stamp + 2% registration; surcharges: Additional duty 0.3%, Local-body surcharge 0.06%.",
"assumptions": [],
"attribution": "AVnester",
"disclaimer": "..."
}curl -X POST https://api.avnester.com/public/v1/estimate_stamp_duty_and_registration \
-H 'Content-Type: application/json' \
-d '{
"propertyValue": 10000000,
"state": "Delhi",
"buyerGender": "joint"
}'{
"propertyValue": 10000000,
"state": "Delhi",
"supported": true,
"stateCode": "DL",
"stampDuty": 500000,
"registrationFee": 100100,
"total": 600100,
"rateBasis": "Delhi: 5% stamp + 1% registration plus ₹100 (joint-owner rate applied).",
"assumptions": [
{
"code": "RULE_NOT_MODELLED",
"message": "Delhi charges the women's 4% on the woman's share only. This prices a man and a woman in equal shares (5%); other shares pay between 4% and 6% in proportion."
}
],
"attribution": "AVnester",
"disclaimer": "..."
}Rate limits
OAuth (Developer)
30 / min
The same ceiling applies to every tool on a given plan, on both the MCP and REST transports; every plan’s is on Pricing. OAuth registration is free and self-serve. Calls made without signing in have their own per-IP limits — see the quickstart.
Common errors
400Missing state`state` is required (since v5 — it used to default silently to Tamil Nadu). The body is invalid_params with an issue whose path is "state". Send the ISO code, slug or name.
200supported: false in body — a state outside IndiaNot an HTTP error: every amount is 0, rateEffectiveDate and rulesVersion are null, and rateBasis names the main supported states. Send one of the 28 states and 8 union territories.
429Rate limit exceededBack off until the time in the Retry-After header. Signed in with OAuth, the per-tool limit is counted per user instead of per address; a paid plan raises it.
429Daily call limit reached (calls without signing in)Retry-After counts to 00:00 UTC, and only calls that returned an answer count. Signed in, calls count against your plan instead of your IP address.
Next steps
- → Try estimate_stamp_duty_and_registration in the playground (no signup)
- → Register an OAuth client (free on the Developer plan)
- → Browse the other 10 tools
- → Full schema in the OpenAPI spec