Everything the applicant-facing forms need: submit an application for each service, track and correct it, and load the districts, talukas and master data that fill the form dropdowns.
Base URLhttps://rts.consofthub.in/wp-json/rts/v1
10Submission endpoints
3Tracking endpoints
3Lookup endpoints
JSONRequests & responses
Quick reference
Every endpoint at a glance. Paths are relative to the base URL above.
Endpoints that create applications require HTTP Basic authentication. Lookup and tracking endpoints are open.
Join the integration username and application password with a colon, base64-encode the result and send it in the Authorization header. Credentials are issued by the RTS team and must only be used server-side — never ship them in browser JavaScript.
Authentication errors use WordPress’s error shape (code / message / data.status). Every other response uses the success / data envelope below.
Requests & responses
How to send data and how to read what comes back.
Requests
Send POST bodies as JSON with Content-Type: application/json. A body that is not a JSON object returns 400 Invalid JSON body.
Numbers may be sent as JSON numbers or numeric strings — 12 and "12" are equivalent.
Field names are case-sensitive.
Response envelope
Responses are { "success": true|false, "data": { … } }. On failure data.message explains why; validation failures that concern several fields also include data.fields.
The same account already submitted this service — see duplicates.
Duplicate application found.
422
Validation failed. Nothing was stored; fix the request and resend.
Required fields are missing.(+ fields) These fields must be non-negative numbers.(+ fields) Invalid email address. Invalid mobile; expected a 10-digit mobile number. The declaration must be accepted. Invalid district_id. region_id does not match the selected district. aadhar_card must be a PDF, JPG or PNG file.
500
Database error while storing; data.debug holds the database message. Safe to retry.
Failed to insert application data.
Validation stops at the first failing rule, except that all missing required fields (and all invalid number fields) are reported together in data.fields. Order: authentication → JSON body → documents → required fields → declaration → numbers → formats (dates, IDs, email, mobile) → district / region → duplicate.
Submission rules
Behaviour shared by every /insert-application/* endpoint.
Rule
Detail
One endpoint per service
The URL decides the service: each form posts to its own /insert-application/<form> route, and the application is stored with that service’s code (MT01–MT11, shown on each card). Any slug in the body is ignored and replaced with the route name.
Only documented fields are kept
Each endpoint stores the fields listed for it, plus documents. Unknown keys are silently dropped — a typo in a field name loses that value (and a misspelt required field is reported as missing).
Text is sanitized
HTML tags are stripped from every text value; single-line fields also lose line breaks. Emails are normalised.
Region follows district
The applicant’s district must exist in /district-data. If region_id is sent it must match that district’s region; the stored region is always the district’s.
Duplicates
One application per account per service: a second submission with the same account email + mobile for the same service returns 409. Which fields are the account’s email / mobile is listed per endpoint under Stored as.
Initial status
New applications start as 1 – Pending (see status codes).
Full payload is kept
The whole sanitized payload is stored with the application and shown to reviewers; the Stored as columns are copied out for the dashboard and duplicate check.
Documents
Files travel inline in the JSON body as base64 data URIs.
Strict base64. Whitespace inside the data is removed; any other invalid character rejects the file.
No file
Send "" or null, or omit the key.
Errors (422)
<field> must be a base64 data URI. <field> must be a PDF, JPG or PNG file. <field> contains invalid base64 data. <field> exceeds the 5 MB limit.
Where documents may appear
Each endpoint lists which keys it treats as documents — a fixed list, a key prefix such as file_*, or “any top-level field whose value is a data URI”.
Files inside nested structures (repeater rows, file objects, enclosures) are moved to top-level document keys such as file_aadhar or file_enclosure_ca_certificate, and the nested entry keeps that key name. Those top-level keys are the names reviewers flag, and the names used by /application-document and /update-flagged-fields.
The whole request, files included, must fit the server’s upload limits. Forms with many documents should keep files small (compress scans, prefer PDF) — very large submissions can be rejected by the web server before they reach the API.
Value formats
The types used in the field tables and what each accepts.
Type
Accepted values
string
Single-line text. Tags and line breaks are stripped.
text
Multi-line text. Tags are stripped; line breaks kept.
integer
Whole number or numeric string; stored as a non-negative integer. Empty becomes 0.
number
Non-negative number, decimals allowed, e.g. "1250000.50". Stored as the submitted string. Negative or non-numeric values return 422.
boolean
true"true"1"1""yes""on" are true; anything else ("", "false", 0) is false.
date
A real calendar date. Each field states whether it takes YYYY-MM-DD only or also YYYY/MM/DD. Empty is allowed for optional dates.
mobile
10 digits starting with 6–9, e.g. 7588690658. No +91, spaces or dashes.
Aadhaar
Exactly 12 digits.
PAN
ABCDE1234F — 5 letters, 4 digits, 1 letter (upper-cased before checking).
GSTIN
15 characters, e.g. 27AAACR5055K1Z7 (upper-cased before checking).
Registers a vacation home. Service code MT07; processed within 45 days.
The four tourism property forms (vacation homes, villas, apartments, homestays) accept exactly the same fields. Each has its own endpoint and service_code, so duplicates are checked per form.
Body fields
Field
Type
Required
Rules
name
string
Required
Applicant name. Stored in the applicant_name column.
region_id
integer
Optional
Must equal the region of the district below, otherwise 422. The stored value is always taken from the district.
region_district_id
integer
Required
Applicant’s district (paired with region_id). Drives the table’s district_id column and the region check.
business_name
string
Required
—
business_type
integer
Required
Applicant type ID.
pan_no
string
Required
PAN, e.g. ABCDE1234F. Upper-cased before validation.
business_pan_no
string
Optional
PAN format when given.
aadhaar_no
string
Required
Exactly 12 digits.
udyam_reg_no
string
Optional
—
ownership_proof_type
string
Optional
e.g. Property Card, Property Tax Receipts.
state
string
Optional
Stored as sent (name or ID).
district
integer
Optional
Business / property address district ID.
district_id
integer
Required
Property district ID. Stored in the payload only.
is_property_rented
"1" | "0"
Optional
Stored as "1" / "0".
operator_name
string
Conditional
Required when is_property_rented is "1".
property_name
string
Required
—
geo_link
string
Optional
—
address_proof_type
string
Optional
—
address
text
Required
Multi-line allowed.
total_area_sqft
integer
Optional
Whole number; decimals are truncated.
mahabooking_reg_no
string
Optional
—
is_operational
"1" | "0"
Optional
—
operational_since
string
Conditional
Required when is_operational is "1". Stored as sent (e.g. a year).
Submitting account’s email. Stored in applicant_email.
phone
string
Required
10-digit mobile. Stored in applicant_mobile_number.
file
object
Optional
{ "<category>": [ { "file": <data URI>, "original_name": "…", "size": 123 } ] }. Each upload is stored as a document named file_<category>, then file_<category>_2, _3… for further files in the same category. original_name and size are discarded.
Stored as
Application column
Taken from
applicant_name
name
applicant_email
email
applicant_mobile_number
phone
district_id
region_district_id
service_code
MT07(fixed)
Duplicate check: email + phone for this service.
Example request body
POST /insert-application/registration-of-vacation-homes · file data shortened
Registers a tourism villa. Service code MT05; processed within 45 days.
The four tourism property forms (vacation homes, villas, apartments, homestays) accept exactly the same fields. Each has its own endpoint and service_code, so duplicates are checked per form.
Body fields
Field
Type
Required
Rules
name
string
Required
Applicant name. Stored in the applicant_name column.
region_id
integer
Optional
Must equal the region of the district below, otherwise 422. The stored value is always taken from the district.
region_district_id
integer
Required
Applicant’s district (paired with region_id). Drives the table’s district_id column and the region check.
business_name
string
Required
—
business_type
integer
Required
Applicant type ID.
pan_no
string
Required
PAN, e.g. ABCDE1234F. Upper-cased before validation.
business_pan_no
string
Optional
PAN format when given.
aadhaar_no
string
Required
Exactly 12 digits.
udyam_reg_no
string
Optional
—
ownership_proof_type
string
Optional
e.g. Property Card, Property Tax Receipts.
state
string
Optional
Stored as sent (name or ID).
district
integer
Optional
Business / property address district ID.
district_id
integer
Required
Property district ID. Stored in the payload only.
is_property_rented
"1" | "0"
Optional
Stored as "1" / "0".
operator_name
string
Conditional
Required when is_property_rented is "1".
property_name
string
Required
—
geo_link
string
Optional
—
address_proof_type
string
Optional
—
address
text
Required
Multi-line allowed.
total_area_sqft
integer
Optional
Whole number; decimals are truncated.
mahabooking_reg_no
string
Optional
—
is_operational
"1" | "0"
Optional
—
operational_since
string
Conditional
Required when is_operational is "1". Stored as sent (e.g. a year).
Submitting account’s email. Stored in applicant_email.
phone
string
Required
10-digit mobile. Stored in applicant_mobile_number.
file
object
Optional
{ "<category>": [ { "file": <data URI>, "original_name": "…", "size": 123 } ] }. Each upload is stored as a document named file_<category>, then file_<category>_2, _3… for further files in the same category. original_name and size are discarded.
Stored as
Application column
Taken from
applicant_name
name
applicant_email
email
applicant_mobile_number
phone
district_id
region_district_id
service_code
MT05(fixed)
Duplicate check: email + phone for this service.
Example request body
POST /insert-application/registration-of-tourism-villas · file data shortened
Registers a tourism apartment. Service code MT06; processed within 45 days.
The four tourism property forms (vacation homes, villas, apartments, homestays) accept exactly the same fields. Each has its own endpoint and service_code, so duplicates are checked per form.
Body fields
Field
Type
Required
Rules
name
string
Required
Applicant name. Stored in the applicant_name column.
region_id
integer
Optional
Must equal the region of the district below, otherwise 422. The stored value is always taken from the district.
region_district_id
integer
Required
Applicant’s district (paired with region_id). Drives the table’s district_id column and the region check.
business_name
string
Required
—
business_type
integer
Required
Applicant type ID.
pan_no
string
Required
PAN, e.g. ABCDE1234F. Upper-cased before validation.
business_pan_no
string
Optional
PAN format when given.
aadhaar_no
string
Required
Exactly 12 digits.
udyam_reg_no
string
Optional
—
ownership_proof_type
string
Optional
e.g. Property Card, Property Tax Receipts.
state
string
Optional
Stored as sent (name or ID).
district
integer
Optional
Business / property address district ID.
district_id
integer
Required
Property district ID. Stored in the payload only.
is_property_rented
"1" | "0"
Optional
Stored as "1" / "0".
operator_name
string
Conditional
Required when is_property_rented is "1".
property_name
string
Required
—
geo_link
string
Optional
—
address_proof_type
string
Optional
—
address
text
Required
Multi-line allowed.
total_area_sqft
integer
Optional
Whole number; decimals are truncated.
mahabooking_reg_no
string
Optional
—
is_operational
"1" | "0"
Optional
—
operational_since
string
Conditional
Required when is_operational is "1". Stored as sent (e.g. a year).
Submitting account’s email. Stored in applicant_email.
phone
string
Required
10-digit mobile. Stored in applicant_mobile_number.
file
object
Optional
{ "<category>": [ { "file": <data URI>, "original_name": "…", "size": 123 } ] }. Each upload is stored as a document named file_<category>, then file_<category>_2, _3… for further files in the same category. original_name and size are discarded.
Stored as
Application column
Taken from
applicant_name
name
applicant_email
email
applicant_mobile_number
phone
district_id
region_district_id
service_code
MT06(fixed)
Duplicate check: email + phone for this service.
Example request body
POST /insert-application/registration-of-tourism-apartments · file data shortened
Registers a homestay. Service code MT08; processed within 45 days.
The four tourism property forms (vacation homes, villas, apartments, homestays) accept exactly the same fields. Each has its own endpoint and service_code, so duplicates are checked per form.
Body fields
Field
Type
Required
Rules
name
string
Required
Applicant name. Stored in the applicant_name column.
region_id
integer
Optional
Must equal the region of the district below, otherwise 422. The stored value is always taken from the district.
region_district_id
integer
Required
Applicant’s district (paired with region_id). Drives the table’s district_id column and the region check.
business_name
string
Required
—
business_type
integer
Required
Applicant type ID.
pan_no
string
Required
PAN, e.g. ABCDE1234F. Upper-cased before validation.
business_pan_no
string
Optional
PAN format when given.
aadhaar_no
string
Required
Exactly 12 digits.
udyam_reg_no
string
Optional
—
ownership_proof_type
string
Optional
e.g. Property Card, Property Tax Receipts.
state
string
Optional
Stored as sent (name or ID).
district
integer
Optional
Business / property address district ID.
district_id
integer
Required
Property district ID. Stored in the payload only.
is_property_rented
"1" | "0"
Optional
Stored as "1" / "0".
operator_name
string
Conditional
Required when is_property_rented is "1".
property_name
string
Required
—
geo_link
string
Optional
—
address_proof_type
string
Optional
—
address
text
Required
Multi-line allowed.
total_area_sqft
integer
Optional
Whole number; decimals are truncated.
mahabooking_reg_no
string
Optional
—
is_operational
"1" | "0"
Optional
—
operational_since
string
Conditional
Required when is_operational is "1". Stored as sent (e.g. a year).
Submitting account’s email. Stored in applicant_email.
phone
string
Required
10-digit mobile. Stored in applicant_mobile_number.
file
object
Optional
{ "<category>": [ { "file": <data URI>, "original_name": "…", "size": 123 } ] }. Each upload is stored as a document named file_<category>, then file_<category>_2, _3… for further files in the same category. original_name and size are discarded.
Stored as
Application column
Taken from
applicant_name
name
applicant_email
email
applicant_mobile_number
phone
district_id
region_district_id
service_code
MT08(fixed)
Duplicate check: email + phone for this service.
Example request body
POST /insert-application/registration-of-homestays · file data shortened
MT02 Issuance of Temporary Registration Certificate
Applies for a temporary registration certificate for a tourism enterprise project. Service code MT02; processed within 45 days.
This form carries two sets of contact details: email/mobile belong to the enterprise, email_id/phone to the logged-in account. The duplicate check uses the account’s.
Body fields
Field
Type
Required
Rules
applicant_name
string
Required
—
company_name
string
Required
—
email
string
Required
Enterprise email. Valid email; payload only.
mobile
string
Required
Enterprise mobile, 10 digits; payload only.
region_id
integer
Optional
Must equal the region of the district below, otherwise 422. The stored value is always taken from the district.
district_id
integer
Required
ID from /district-data. Unknown IDs are rejected (422).
Rows of { existing_facilities, existing_employment, expansion_facilities, expansion_employment } (non-negative numbers). At least one row is required when project_type is Expansion.
entrepreneurs_profile
array
Optional
Rows of { name, designation, ownership, gender, age }. ownership is a percentage 0–100; age a whole number.
other_documents
array
Optional
Rows of { other_doc_name, other_doc_no, other_issue_date, other_validity_date, other_doc_file }. A file (data URI) is stored as document file_other_document_<n> and the row’s other_doc_file holds that key. null means no file.
<type>_doc_no<type>_issue_date
string, date
Optional
For each supporting document type: commencement_certificate, sanctioned_plan, proof_of_identity, proof_of_address, land_ownership, project_report, incorporation_documents, gst_registration, special_category_proof, ca_certificate, processing_fee_challan.
<type>_filesignature
data URI
Optional
Every top-level data-URI field is a document, e.g. ca_certificate_file, processing_fee_challan_file, signature.
declaration
boolean
Required
Must be true.
place
string
Required
—
date
date
Required
YYYY/MM/DD or YYYY-MM-DD.
email_id
string
Required
Submitting account’s email. Stored in applicant_email.
phone
string
Required
Submitting account’s mobile, 10 digits. Stored in applicant_mobile_number.
Stored as
Application column
Taken from
applicant_name
applicant_name
applicant_email
email_id
applicant_mobile_number
phone
district_id
district_id
service_code
MT02(fixed)
Duplicate check: email_id + phone for this service.
Example request body
POST /insert-application/issuance-of-temporary-registration-certificate · file data shortened
Applies for an eligibility certificate against a provisional registration. Service code MT04; processed within 60 days.
Body fields
Field
Type
Required
Rules
applicant_name
string
Required
—
provisional_number
string
Required
—
gst_number
string
Optional
Valid 15-character GSTIN when given; upper-cased.
region_id
integer
Optional
Must equal the region of the district below, otherwise 422. The stored value is always taken from the district.
district_id
integer
Required
ID from /district-data. Unknown IDs are rejected (422).
entrepreneurs
array
Required
At least one row of { name, designation, ownership, gender, age }. ownership is free text here; age a whole number.
project_description
text
Optional
—
commencement_date
date
Required
YYYY/MM/DD or YYYY-MM-DD.
operation_details
string
Required
e.g. Third Party.
cost_component
object
Optional
Amount per asset component (non-negative number). Components: structures_buildings, machinery_equipment, material_handling, mep_installations, fixtures_furniture, waste_treatment, transformer_generator, captive_power, utility_installation, quality_investments, sustainability_initiatives. Other keys are dropped.
asset_age
object
Optional
Text per asset component (same keys).
ownership
object
Optional
List of strings per asset component, e.g. { "captive_power": ["Owned"] }.
other_docs
array
Optional
Rows of { name, doc_no, issue_date, validity_date, file }. A file is stored as document file_other_doc_<n> and the row’s file holds that key.
enclosures
object
Optional
{ "<type>": { label, doc_no, issue_date, file } }, e.g. travel_life, ca_certificate. Any type key is accepted. A file is stored as document file_enclosure_<type>.
declaration_check
boolean
Required
Must be true.
declaration_place
string
Required
—
declaration_date
date
Required
YYYY/MM/DD or YYYY-MM-DD.
email
string
Required
Submitting account’s email.
mobile
string
Required
Submitting account’s mobile, 10 digits.
Stored as
Application column
Taken from
applicant_name
applicant_name
applicant_email
email
applicant_mobile_number
mobile
district_id
district_id
service_code
MT04(fixed)
Duplicate check: email + mobile for this service.
Example request body
POST /insert-application/issuance-of-eligibility-certificate · file data shortened
Submit corrected values for the fields a reviewer flagged. Only works while the application is on hold (status 2).
Body
Field
Type
Required
Description
fields
object
Required
Map of flagged field key → corrected value. Keys that were not flagged are ignored. Values must be strings or numbers (a corrected document is a data URI string); arrays and objects are stored as "".
Behaviour
Only the submitted flagged keys change; the rest of the application is untouched.
Corrected keys are removed from the flagged list. When none remain, the status returns to 1 – Pending for re-review; otherwise it stays 2.
The change is recorded in the application’s status history as made by the applicant.
project_categories rows include a units array of unit IDs; regions rows include a districts array of district IDs. Both are real JSON arrays — no manual parsing needed.
Master data resource keys
Values accepted by ?resource=. Each link opens the live data.
The 4 industrial_* resources are placeholder tables — the upstream endpoints they mirror haven’t published data yet, so they currently always return an empty array.
Legacy
Kept for existing integrations.
POST/application-insertBasic auth
Generic application insert
Original generic submission endpoint. Stores the whole body without per-form validation.
Any other fields are stored in the payload as sent. Returns HTTP 200 for both success (Application data inserted successfully.) and failure (All fields are required., Duplicate application found., Failed to insert application data.) — check success. The response does not include the new application ID.