Citiwise Check API
The Check API from Citiwise — 1 operation(s) for check.
The Check API from Citiwise — 1 operation(s) for check.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/citiwise-in:citiwise-in-check-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Citiwise Check API
version: '1.40'
description: Citiwise tells what UDCPR 2020 allows on a plot in Maharashtra wherever the regulations apply, which is outside Greater Mumbai and the other areas regulation 1.1(i) leaves out. It gives the FSI and built-up area, the margin on every side, the height, the building that fits, parking and approvals, each with its UDCPR clause. No sign-in is needed. Every feasibility answer includes a plain-language summary and links to the report and its PDF to hand to the user. A field the call does not read is listed in the answer under ignored, not refused. This is a feasibility assessment only; the planning authority decides.
contact:
email: hello@citiwise.in
url: https://citiwise.in/connect
termsOfService: https://citiwise.in/terms
servers:
- url: https://citiwise.in
tags:
- name: Check
paths:
/api/check:
post:
operationId: checkDesign
summary: Check a proposed building against UDCPR
description: Use this when someone has a proposed building on a plot in Maharashtra and wants to know whether it meets UDCPR. Checks a proposal's built-up, height and margins (one per side, in side order) against UDCPR, with allowed, proposed and pass or fail per item.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
town:
type: string
maxLength: 80
description: Maharashtra town, city or planning authority, e.g. Pune, Kolhapur, Nashik, PMRDA
area:
type: number
description: 'plot area as the user gave it, in m2 unless area_unit says sqft, guntha, acre or hectare: the least of 7/12, measurement sheet and site'
road:
type: number
description: width of the road in front, in m unless road_unit is ft, when there is one road and no sides
area_unit:
type: string
enum:
- m2
- sqft
- guntha
- acre
- hectare
description: unit of area, road_widening and reservation as the user gave them; default m2. Citiwise converts and says so in units
road_unit:
type: string
enum:
- m
- ft
description: unit of road and of each road side's width as the user gave them; default m
sides:
type: array
items:
type: object
properties:
type:
type: string
enum:
- road
- plot
- open
- nallah
- river
- rail
- shared
width:
type: number
minimum: 0
description: DP road width in m, for roads
length:
type: number
minimum: 0
maximum: 100000.0
name:
type: string
maxLength: 40
description: label, e.g. south
side:
type: integer
minimum: 1
maximum: 64
description: 'for a curved or many-pointed side drawn as several segments: the side number each segment belongs to, the same on every segment of that side'
corner:
type: boolean
description: 'true for the rounding or cut where two roads meet (3.3.12): margins run from it, but it is not a road of its own'
required:
- type
maxItems: 64
description: every side, anticlockwise, starting at a road
zone:
type: string
enum:
- nc
- c
description: nc non-congested, c congested (gaothan)
land_use:
type: string
enum:
- res
- com
- ind
- psp
- agr
- tt
- gb
- loom
- park
- tourism
- afforest
- hilltop
- green2
- forest
- defence
- mines
- utility
- woodland
- sez
- airport
description: 'the zone on the development or regional plan: residential, commercial, industrial, public / semi-public, agricultural, transport, green belt, loom industry cum residential (4.9), regional park (4.14), tourism development (4.15), afforestation (4.16), hill top (4.17), green zone 2 (4.18), forest, defence, mines and quarry, public utility, woodland corridor, special economic zone, airport (4.19 to 4.25)'
road_widening:
type: number
description: area of the plot under DP road widening, in the unit of area
minimum: 0
maximum: 100000000.0
reservation:
type: number
description: area of the plot under a DP reservation, in the unit of area
minimum: 0
maximum: 100000000.0
handed_over:
type: boolean
description: the road widening and reservation land is handed over to the Authority, for its development rights (11.2.4); default true
stilt:
type: boolean
description: parking on a stilt floor, left out of the FSI; default false
ground_height:
type: number
description: height of the ground or stilt floor, m
minimum: 2
maximum: 10
floor_height:
type: number
description: height of each upper floor, m
minimum: 2
maximum: 10
basements:
type: integer
minimum: 0
maximum: 5
description: levels of basement, for parking and services (9.11)
basement_flush:
type: boolean
description: 'basement top flush with the ground: it may then run into the side and rear margins (9.11.1 proviso i)'
units:
type: array
maxItems: 12
items:
type: object
required:
- type
- carpet
properties:
type:
type: string
description: 'label of up to 20 characters: 1 BHK, 2 BHK, Studio, Shop, Office'
count:
type: integer
description: units of this type, 0 to 10000; leave out to work it out
per_floor:
type: integer
description: 'instead of count: units of this type on each typical floor, 0 to 200, repeated on every floor that carries units'
carpet:
type: number
description: carpet area of one unit, m2, 10 to 2000
share:
type: number
description: 'with count left out: this type''s share of the carpet area, 0 to 1 or a percentage'
share_of_units:
type: number
description: 'with count left out: this type''s share of the units, as a developer gives a mix (60 for 60% 2 BHK), 0 to 1 or a percentage; the number of units is worked out from the building'
description: the unit mix, one entry per type, e.g. [{"type":"2 BHK","count":12,"carpet":60},{"type":"Shop","count":4,"carpet":25}]; parking takes each type in its own Table 8-B row; a count left out is worked out from the building
wings:
type: array
maxItems: 12
items:
type: object
required:
- name
- units
properties:
name:
type: string
description: 'the wing''s name, up to 12 characters: A, B, Tower 1'
floors:
type: integer
description: floors of this wing that carry units, 1 to 60; left out, those of the building that fits
units:
type: array
items:
type: object
required:
- type
- per_floor
properties:
type:
type: string
description: one of the types in units
per_floor:
type: integer
description: units of that type on this wing's typical floor, 0 to 200
description: a group housing project as wings, each with its own typical floor and floors; units then gives each type and its carpet only. Returns each wing's height, lifts, special building and the distance between wings (6.2.4), and the built-up the wings need against what the rules allow
flats:
type: integer
description: number of flats; with carpet, a one-type unit mix
minimum: 1
maximum: 1000000.0
carpet:
type: number
minimum: 0
maximum: 100000000.0
description: carpet area of a flat, m2
polygon:
type: array
items:
type: array
items:
type: number
minimum: -100000.0
maximum: 100000.0
maxItems: 2
maxItems: 64
description: plot corners [x, y] in m, anticlockwise, one per side, side 1 first; needed for plots that are not rectangles
sprinklers:
type: boolean
description: 'mixed building fully sprinklered with the travel distances kept: under the 1.3(93)(xiv) note it stays out of the special building rules up to 24 m with floors up to 750 m², subject to fire NOC'
avoid_special:
type: boolean
description: 'true: keep the building out of the special building rules (1.3(93)(xiv)): no higher than 24 m, and for the uses the floor area reaches, each floor below 500 m² (750 m² for a sprinklered mixed building). Either way, special_choice sets the building kept out beside the special building, with what the special building brings'
power_line_kv:
type: number
minimum: 0
maximum: 1200
description: voltage of an overhead line near the plot, kV, for its clearance
tod:
type: boolean
description: 'plot inside a TOD zone (14.2): Municipal Corporations, metropolitan authorities and CIDCO; the Nagpur Metro Rail Corridor by Table 14-P'
gaothan_belt:
type: boolean
description: a Regional Plan village plot in the agricultural zone, within the belt around the gaothan or a town where 5.1.1 permits residential development, on a premium of a share of the land's ASR rate
reservation_type:
type: string
enum:
- recreational
- education
- commercial
- health
- transport
- bus_stand
- truck_terminus
- residential
- assembly
- psp
- other
description: 'what the DP reservation on the plot is for; with ''reservation'', returns accommodation_reservation: developing it by its owner under 11.1, Table 11-A'
access_length:
type: number
minimum: 0
maximum: 100000.0
description: 'the plot does not abut a public street: the length of the access way to it, m, measured to the street; ''road'' is then the access way''s width (3.2.2, 3.3.3)'
layout_kind:
type: string
enum:
- plots
- group_housing
description: 'the land is laid out into plots, or developed as a group housing scheme; returns layout: the internal road widths of Tables 3A to 3C and what the layout carries (3.3, 3.4, 2.7.2)'
internal_road_length:
type: number
minimum: 0
maximum: 100000.0
description: with layout_kind, the length of the longest internal road, m, from the farthest plot or building to the public street (3.3.3)
existing_kind:
type: string
enum:
- society
- tenanted
- mhada_society
- mhada
- bungalow
description: 'what stands on the plot, for redevelopment (7.4, 7.5, 7.6): a co-operative society''s building, a tenanted building, a MHADA scheme building redeveloped by the society or by MHADA, or a bungalow; returns schemes with the figures'
existing_built_up:
type: number
minimum: 0
maximum: 100000000.0
description: authorised built-up of the existing building, m², with its TDR and premium FSI (7.5, 7.6)
existing_tenements:
type: integer
minimum: 0
maximum: 1000000.0
description: tenements in the existing building (7.4.2, 7.6)
existing_carpet:
type: number
minimum: 0
maximum: 100000000.0
description: carpet area of the existing tenements together, m² (7.4.2, 7.6)
slum_tenements:
type: integer
minimum: 0
maximum: 1000000.0
description: eligible hutments on the plot, for slum rehabilitation (14.6, 14.7)
rc_rate:
type: number
minimum: 0
maximum: 10000000.0
description: the ASR rate of RCC construction, Rs a m², for the land rate to construction rate ratio of Tables 7-C to 7-E
crz:
type: string
enum:
- I
- II
- III
description: 'the coastal regulation zone the plot is in: I (between the tide lines), II, or III within its No Development Zone. No TDR in the coastal zone (11.2.8(c)); development as the CRZ Notification allows (1.6(i))'
flood_zone:
type: string
enum:
- prohibitive
- restrictive
description: 'the plot lies within the blue flood line (prohibitive: no construction, no TDR) or between the blue and red flood lines (restrictive: plinth above the red flood line) (3.1.3; 11.2.8(b))'
specified_area:
type: string
maxLength: 40
description: 'Kolhapur: the characteristic specified area of Table 10-B (10.9.1) the plot is in, by Sr. No. (''1'' for Rajarampuri) or the area''s name; where the row has several plot sizes, Sr. No. and the plot row, e.g. ''3.2''. Sets the Table 10-B margins and coverage and the Note 1 basic FSI. Pune: ''koregaon_park'' (10.1.2). A Regional Plan area: an area of Chapter 5 with rules of its own, one of hill_station, station_near, station_far, tarapur, ratnagiri_pada, sindhudurg_t2, sindhudurg_t4, sindhudurg_t5, mp_buffer_edge, mp_buffer_gaothan, satara_core, satara_buffer, nagothane, wadi, rajpuri_usar, sector_r_lonavala, sector_r_kune, aurangabad_strip, ligo. Chapter 10 city areas, Pune: parvati_chatushrungi, arde, hemrl; Thane: ram_maruti, gokhale, express_highway, chemical_green_belt, chemical_low_density, air_force, defence_buffer, g1_yeur, g3_forest, eco_sensitive, defence_west_orange, defence_west_pink, defence_west_navy_blue, defence_west_yellow, defence_west_violet, defence_west_green, defence_east_orange, defence_east_pink, defence_east_yellow, defence_east_violet, defence_east_sky_blue; Nashik: tps1, gangapur_ambad; Vasai-Virar: low_density, eco_sensitive; Mira-Bhayandar: road_strip, manori_gorai_uttan, eco_sensitive; NMRDA: ring_road, township, gaothan_small, gaothan_large'
road_widening_side:
type: integer
minimum: 1
maximum: 64
description: side number (1-based) that the road widening strip comes off; default the first road side
plot_origin:
type: string
enum:
- layout
- unauthorised
- gunthewari
description: 'layout: sanctioned layout or sub-division; unauthorised: sub-divided after 11.01.1967 without permission; gunthewari: regularised under the Gunthewari Act'
asr_rate:
type: number
minimum: 0
maximum: 10000000.0
description: land rate of the plot in the Annual Statement of Rates, Rs a m2; gives premiums in rupees and the DRC to debit
sale_rate:
type: number
minimum: 0
maximum: 10000000.0
description: 'sale rate, Rs a sq ft of carpet area; with build_cost and tdr_rate gives an appraisal: sales value, construction, premiums, TDR and the surplus before land'
build_cost:
type: number
minimum: 0
maximum: 10000000.0
description: construction cost, Rs a sq ft of built-up area
tdr_rate:
type: number
minimum: 0
maximum: 10000000.0
description: price of TDR, Rs a sq ft
measured:
type: boolean
description: 'true: the polygon is the plot as measured on site (draw_plot gives it so), drawn as it is; area, the least of the areas of Appendix A item 1, may then be smaller than the polygon. Without it the drawing is scaled to area'
areas:
type: object
description: 'the three areas of Appendix A item 1, in m2, for the area statement: ownership (the 7/12 or property card), sheet (the measurement sheet of the Land Records) and site (by the measurements); area is the least of those given'
properties:
ownership:
type: number
minimum: 0
maximum: 100000000.0
sheet:
type: number
minimum: 0
maximum: 100000000.0
site:
type: number
minimum: 0
maximum: 100000000.0
step_margins:
type: boolean
description: 'true: step margins on upper floors (6.2.3(c)): each floor keeps the side and rear margin its own height needs, so lower floors are larger; 6 m at the ground for a special building'
green:
type: string
enum:
- silver
- gold
- platinum
description: 'green rating committed (IGBC / GRIHA / LEED tier) for the incentive FSI of 7.10 on basic FSI: 3%, 5% or 7%'
steep_area:
type: number
minimum: 0
maximum: 100000000.0
description: 'm² of the plot steeper than 1 in 5: hill top and hill slope land, not built upon (3.1.1(iii); 4.2 (XIV))'
allotted_basic:
type: number
minimum: 0
maximum: 100000000.0
description: for a plot of a plotted layout, the basic FSI area in m² the layout plan allots it (3.9(iii)), up to the most the plot may receive
buy_premium:
type: boolean
description: 'false: the study is drawn without premium FSI (and without the Table 7-A higher FSI, which is taken on premium), on basic FSI, any TDR and the ancillary area; default true'
buy_tdr:
type: boolean
description: 'false: the study is drawn without buying TDR, on basic and premium FSI with their ancillary area; default true. Either way, tdr_choice sets both side by side, with the most TDR is worth to this plot when sale_rate and build_cost are given'
margin:
type: number
minimum: 0
maximum: 100
description: margin the developer needs, % of sales value; with the rates, gives what the land carries and the largest share of the flats for the landowner in a joint development
other_costs:
type: number
minimum: 0
maximum: 100
description: other costs (fees, finance, marketing), % of construction and the stilt floor
parking_cost:
type: number
minimum: 0
maximum: 10000000.0
description: construction cost of the stilt floor, Rs a sq ft; the stilt is free of FSI but built; default build_cost
land_price:
type: number
minimum: 0
maximum: 1000000000000.0
description: asking price of the land when it is being bought, Rs for the whole plot; with the rates, gives the profit at that price and how far it sits from what the land carries
jda_offer:
type: number
minimum: 0
maximum: 100
description: share of the flats a developer has offered the landowner in a joint development, %; with the rates, gives what the developer keeps at that share beside the share the plot carries
prepared_for:
type: string
maxLength: 80
description: who the study is for, as it should appear on its cover, e.g. the landowner or client
prepared_by:
type: string
maxLength: 80
description: who is giving the study, as it should appear on its cover, e.g. a broker or developer
papers:
type: array
items:
type: string
enum:
- '712'
- sheet
- zone
- layout
description: 'the papers the facts were read from, when they were: 712 (the 7/12 extract or property card, for the area), sheet (the measurement sheet, for the sides and area), zone (the zone certificate or DP remark, for the zone, the road width, road widening and reservations), layout (the sanctioned layout or regularisation order). The study marks each fact as read from its paper or as told; no rule reads them'
carpet_share:
type: number
description: carpet area as a share of the built-up, 0.3 to 0.95 or 30 to 95 (default 0.8); sets the unit counts left out and so the sales value
tdr_generating_rate:
type: number
minimum: 0
maximum: 10000000.0
description: ASR land rate of the TDR's generating plot, Rs a m2 (11.2.6)
use_carpet:
type: number
minimum: 0
maximum: 100000000.0
description: carpet area of a non-residential use, or of the shops below flats, m2, for its parking and water; default the built-up that fits
rooms:
type: integer
minimum: 1
maximum: 1000000.0
description: guest rooms, for hotel parking and sanitation
beds:
type: integer
minimum: 1
maximum: 1000000.0
description: 'beds: for hospitals, parking, water, sanitation and grey water; for hotels, water'
seats:
type: integer
minimum: 1
maximum: 1000000.0
description: seats, for assembly parking
bathrooms:
type: boolean
description: 'factories: whether bath-rooms are provided, for water (Table 12-A)'
use:
type: string
enum:
- flats
- mix
- bung
- row
- shop
- office
- it
- hotel
- fuel
- school
- college
- hospital
- public
- assembly
- mangal
- parking
- warehouse
- factory
description: 'the use of the building: flats for flats; mix for flats with shops below; bung for a bungalow; row for row houses; shop for shops; office for offices; it for an IT building; hotel for a hotel; fuel for a fuel station; school for a school; college for a college; hospital for a hospital; public for a public building; assembly for a cinema, hall or mall; mangal for a mangal karyalaya; parking for a parking building; warehouse for a warehouse; factory for a factory'
proposed:
type: object
properties:
built_up:
type: number
description: proposed built-up, m²
minimum: 0
maximum: 100000000.0
height:
type: number
description: proposed height, m
minimum: 0
maximum: 300
upper_floors:
type: integer
description: proposed floors above the ground or stilt
minimum: 0
maximum: 60
margins:
type: array
items:
type: number
minimum: 0
maximum: 100000.0
maxItems: 64
description: proposed margin on each side, m, in the order of sides (front first for one road)
description: the proposal; at least one of built_up, height, upper_floors or margins
required:
- town
- area
- use
- proposed
responses:
'200':
description: Allowed, proposed and pass or fail per item.
content:
application/json:
schema:
type: object
properties:
ignored:
type: array
items:
type: string
description: the fields of the request this call did not read, in the order given; present only when there are any
ignored_note:
type: string
description: the same in a sentence, with the API's name for a field the site calls otherwise (luz is land_use)
additionalProperties: true
'422':
description: A fact is missing or not valid; the message says which.
tags:
- Check