[Skip to content](#main-content)

Features

[Land Lead Management](/features/land-lead-management)[Field Execution](/features/field-execution)[Pricing Intelligence](/features/ai-pricing)[Document Verification](/features/document-verification)[Task Management](/features/task-management)[Competitor Intelligence](/features/competitor-intelligence)[Location Intelligence](/features/location-intelligence)[Smart Dashboard](/features/smart-dashboard)[Audit Trail](/features/audit-trail)[View all features](/features)

Solutions

For your business

[Real Estate Developers](/solutions/real-estate-developers)[Banks & NBFCs](/solutions/banks-nbfcs)[Land Valuation Teams](/solutions/land-valuation-teams)[Legal Teams](/solutions/legal-teams)

For your team

[Decision Maker](/roles/decision-maker)[Team Lead](/roles/team-lead)[Field Team](/roles/field-team)

By Use Case

[Land Acquisition](/solutions/land-acquisition)[Site Analysis](/solutions/site-analysis)[Portfolio Management](/solutions/portfolio)[View all roles](/roles)

Compare

[Proquiro vs Excel](/vs/excel)[Proquiro vs Google Sheets](/vs/google-sheets)[Proquiro vs WhatsApp](/vs/whatsapp-tracking)[Proquiro vs Manual Process](/vs/manual-process)[Proquiro vs LAMS](/vs/lams)[Proquiro vs ERP](/vs/erp)

Resources

[Land Area Converter](/tools/land-area-converter)[Price Per Sq Ft](/tools/price-per-sqft-calculator)[ROI Calculator](/tools/land-roi-calculator)[OSR Calculator](/tools/osr-calculator-india)[Due-Diligence](/tools/land-due-diligence-checklist)[Site Visit](/tools/site-visit-checklist)[Legal Documents](/tools/document-readiness-checker)[Excel Template](/tools/excel-template)[All tools](/tools)

[Pricing](/pricing)

[ Sign in ](https://app.proquiro.com)[Request a Demo](/contact/sales)[Start at ₹639/mo](https://app.proquiro.com/users/sign%5Fup?plan=solo)

Proquiro for developers & AI agents

# Proquiro Developer Resources

Proquiro publishes a complete agent-ready surface — an MCP server with land-acquisition calculators, an OpenAPI 3.0 spec for the public API, RFC 9727 API Catalog, an Agent Skills index, `llms.txt`, and markdown content negotiation on every HTML page. Use the sections below to wire Proquiro into agents, copilots, and downstream tooling.

- [Proquiro MCP Server](#proquiro-mcp-server)
- [Proquiro Public API](#proquiro-public-api)
- [Proquiro OpenAPI Spec](#proquiro-openapi-spec)
- [API Versioning & Deprecation](#proquiro-versioning)
- [Rate Limits](#proquiro-rate-limits)
- [Agent Authentication](/developers/auth)
- [Streaming & SSE](#proquiro-streaming)
- [JSON Error Schema](#proquiro-errors)
- [Proquiro Agent Skills Index](#proquiro-agent-skills)
- [Proquiro llms.txt](#proquiro-llms-txt)
- [Markdown content negotiation](#proquiro-markdown)

## Proquiro MCP Server

The Proquiro MCP server speaks **JSON-RPC 2.0 over Streamable HTTP** and exposes6 land-acquisition calculator tools that AI agents can call directly. MCP clients (Claude Desktop, Cursor, custom agents) can discover the server through its server card and stream tool calls without screen-scraping. Send`Accept: application/json, text/event-stream` on the handshake to opt into SSE responses.

Endpoint

`POST https://proquiro.com/mcp`

Server card

</.well-known/mcp/server-card.json>

Protocol version

`2025-11-25`

Transport

Streamable HTTP — JSON or SSE on the same URL, CORS-enabled, batch-aware

Session header

`Mcp-Session-Id` issued on first response; pass it back on subsequent requests

Server name

`proquiro-land-tools` v1.0.0

Methods

`initialize`, `ping`, `tools/list`,`tools/call`

### Tools exposed by the Proquiro MCP server

- `land_area_convert` — Convert a land area value between Indian land measurement units (sqft, sqm, sqyd, acre, hectare, cent, ground, guntha, biswa, bigha, kanal, marla, katha, dismil, ankanam).
- `price_per_sqft` — Calculate price per square foot, square meter, and price per the supplied unit for a land parcel.
- `land_roi` — Calculate land investment return: total profit, total ROI, and annualized ROI.
- `guideline_value_check` — Compare government guideline value (circle rate / jantri / ready reckoner) against market rate. Returns market premium percentage.
- `land_acquisition_cost` — Calculate full land acquisition cost including stamp duty, registration, brokerage, legal fees, and other costs.
- `proquiro_roi` — Estimate annual ROI of replacing manual land acquisition coordination with Proquiro.

### Quick test from the command line

```
curl -sS https://proquiro.com/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

## Proquiro Docs MCP Server

A second MCP server at `https://proquiro.com/mcp/docs`, over the documentation rather than the product. The server above lets an agent_compute_ things; this one lets it _answer_ them — what a Patta is, how an EC search works, what the stamp-duty rates are — across the help centre, the land-terminology glossary, and the long-form guides.

- `search_docs` — natural-language or keyword search. Returns ranked matches, each with a citable excerpt and the public page URL.
- `get_doc` — full text of one document by the id search returned.
- `list_docs` — every id, title, and URL, optionally filtered by kind.

Same transport, protocol negotiation, and CORS as the product server, and equally credential-free. Two servers rather than nine tools on one, because the audiences differ: an agent wiring up calculators does not want the glossary in its tool list.

## Proquiro Public API

The Proquiro Public API is intentionally narrow — it covers form-handler and health endpoints for the marketing site. It is _not_ a general-purpose data API for the hosted Proquiro app. All endpoints are rate-limited per IP, honeypot-protected, and reject disposable email domains.

- `POST /api/v1/demo-request` — submit a demo request (5 req/IP/hr)
- `GET /api/v1/health` — service health (returns `{ status }`)

The unversioned aliases `/api/demo-request` and `/api/health`remain permanently supported — see[API versioning & deprecation](#proquiro-versioning). Markdown reference: </api/docs>.

## Proquiro OpenAPI Spec

The full OpenAPI 3.0 specification for the Proquiro Public API is published as a static, CORS-enabled JSON document with the canonical`application/openapi+json` media type so SDK generators and AI tooling can consume it directly.

Spec URL

</api/openapi.json>

Catalog

</.well-known/api-catalog> (RFC 9727 `application/linkset+json`)

## API versioning & deprecation policy

The Proquiro Public API is versioned in the **URL path**. The current version is `v1`: `/api/v1/demo-request` and`/api/v1/health` are the canonical paths documented in the OpenAPI spec. The unversioned `/api/*` paths are permanently supported aliases of`v1` and will never change behavior.

- **Breaking changes only ship in a new path version** (`/api/v2/*`). Existing versions keep their contract — request shape, response shape, and error codes are additive-only within a version.
- **Deprecations are announced at least 6 months in advance.** A deprecated endpoint starts returning a `Deprecation` response header, and a `Sunset` header (RFC 8594) with the retirement date once one is scheduled.
- Deprecations and new versions are also announced on the[product updates changelog](/product-updates) and in the[OpenAPI spec](/api/openapi.json) (`deprecated: true` on the affected operations).

Agents can rely on this surface: nothing under `/api/v1/*` or its unversioned aliases will break without a versioned replacement and a 6-month`Sunset` window. Canonical policy page:[**/developers/deprecation-policy — Proquiro API Deprecation Policy**](/developers/deprecation-policy).

## Rate limits

Every `/api/*` endpoint response carries the standard IETF draft rate-limit headers so agents can self-throttle in real time (the publicly cached discovery documents `/api/docs` and `/api/openapi.json` are rate-limited but carry no per-IP counters): `RateLimit`, `RateLimit-Limit`,`RateLimit-Remaining`, `RateLimit-Reset` (seconds until the window resets), and the combined `RateLimit` /`RateLimit-Policy` fields. A `429` additionally carries`Retry-After` and the [structured JSON error](#proquiro-errors)with `error.code = "RATE_LIMITED"`.

- **Global ceiling:** 300 requests per minute per IP across all`/api/*` endpoints (`RateLimit-Policy: 300;w=60`)
- **Demo requests:** 5 requests per IP per hour on`/api/v1/demo-request` (`RateLimit-Policy: 5;w=3600`) — the endpoint's own headers reflect this stricter window

On a `429`, wait `Retry-After` seconds before retrying; when`RateLimit-Remaining` reaches `0`, back off until`RateLimit-Reset` elapses. Need sustained higher volume? See[agent authentication](/developers/auth) for partner access.

## Agent authentication

The Proquiro public API and MCP server are **callable without a credential**. Authentication is entirely optional: it exists so an agent can present a stable identity and hold a credential it can revoke — it unlocks no extra data and raises no rate limit.

Discovery follows the standard two-hop path:

- </.well-known/oauth-protected-resource> — RFC 9728 protected-resource metadata
- </.well-known/oauth-authorization-server> — RFC 8414 authorization-server metadata, carrying the`agent_auth` profile block
- </auth.md> — the prose walkthrough an agent reads top to bottom

Only the `anonymous` identity type is offered. There is no claim ceremony and no agent-provider trust list, because this domain has no user accounts to bind a registration to — so those endpoints are deliberately absent from the metadata rather than advertised and broken. Register, exchange, use, revoke:

```
# 1. Register (returns a short-lived identity_assertion)
curl -sS https://proquiro.com/agent/identity \
  -H 'content-type: application/json' \
  -d '{"type":"anonymous","client":{"name":"AcmeAgent","version":"1.0"}}'

# 2. Exchange it for an access token (RFC 7523 JWT-bearer)
curl -sS https://proquiro.com/oauth2/token \
  -d grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer \
  -d assertion=<identity_assertion>

# 3. Present it. /api/v1/health echoes an `agent` block back.
curl -sS https://proquiro.com/api/v1/health -H 'authorization: Bearer <access_token>'

# 4. Revoke it (RFC 7009, idempotent)
curl -sS https://proquiro.com/oauth2/revoke -d token=<access_token>
```

An _invalid_ bearer token returns `401` with`WWW-Authenticate: Bearer resource_metadata="…"` so an agent can bootstrap discovery from the failure. Omitting the header entirely still returns`200`. Background and partner access:[**/developers/auth — Proquiro Agent Authentication Guide**](/developers/auth).

## Idempotent writes

Every write operation accepts an optional `Idempotency-Key` request header ([draft-ietf-httpapi-idempotency-key-header](https://datatracker.ietf.org/doc/draft-ietf-httpapi-idempotency-key-header/)). Agents retry on network failures; without a key, a retry of a submission that already succeeded comes back as `409 DUPLICATE_REQUEST` — indistinguishable from a genuine duplicate.

- Resending the **identical body** with the same key replays the original status and body, marked `Idempotency-Replayed: true`
- Reusing a key with a **different body** returns`422 IDEMPOTENCY_KEY_REUSED` rather than silently returning someone else's response
- Keys are scoped per operation, remembered for 24 hours, and should be UUIDs
- Transient failures (`429`, `5xx`) are never cached, so they stay retryable

```
curl -sS https://proquiro.com/api/v1/demo-request \
  -H 'content-type: application/json' \
  -H 'idempotency-key: 5f9d0a1c-6a1e-4f2d-9f3b-7c2a8e1d4b60' \
  -d '{"name":"Jane Doe","email":"jane@company.com","phone":"+91 99000 00000"}'
```

## Sandbox environment

<https://site-staging.proquiro.com> is a dedicated staging environment for integration testing. It runs the same code as production on separate Worker infrastructure, exposes the same endpoints, needs no credentials, and supports the same agent-auth flow. It is declared as the second entry in `servers` in the OpenAPI spec, so generated clients can switch by changing the base URL and nothing else.

- MCP server: `https://site-staging.proquiro.com/mcp`
- Agent registration: `https://site-staging.proquiro.com/agent/identity`
- Health: `https://site-staging.proquiro.com/api/v1/health`

Two caveats. It carries no uptime commitment and may be running changes that have not shipped to production yet, so treat a difference between the two as staging being ahead rather than production being broken. And it is `noindex`, so do not link to it from public content.

## CLI & SDKs

Official clients wrap the whole surface — REST endpoints, MCP tools, and the optional agent-auth flow — so agents and developers can script Proquiro without building an integration first. All are zero-dependency and open source in[the site repository](https://github.com/quirotechsolutions/proquiro-site).

- **CLI** — `proquiro` on npm ([source](https://github.com/quirotechsolutions/proquiro-site/tree/main/cli))
- **JavaScript / TypeScript** — `proquiro-sdk` on npm ([source](https://github.com/quirotechsolutions/proquiro-site/tree/main/sdk/js))
- **Python** — `proquiro` on PyPI ([source](https://github.com/quirotechsolutions/proquiro-site/tree/main/sdk/python))

```
# CLI — no install needed
npx proquiro tools
npx proquiro call land_area_convert --value 2 --fromUnit acre --toUnit cent
npx proquiro auth register

# JavaScript
npm install proquiro-sdk

# Python
pip install proquiro
```

## Streaming & SSE

Long-running and progress-bearing operations stream over**Server-Sent Events (SSE)** using HTTP chunked transfer. The Proquiro MCP server implements the MCP _Streamable HTTP_ transport: clients negotiate streaming with the `Accept` header on the same `/mcp` URL — no separate SSE endpoint, no WebSocket.

- Send `Accept: text/event-stream` on POST to receive each JSON-RPC response as an SSE `message` event with chunked transfer encoding
- The server has no server-initiated messages, so a GET with`Accept: text/event-stream` returns `405 Method Not Allowed`per the Streamable HTTP spec — clients simply use POST request/response
- The server is stateless: it issues (or echoes) `Mcp-Session-Id` so clients can correlate requests, but no server-side session state is kept. Send`MCP-Protocol-Version` on requests after `initialize`; unsupported values get a `400`

SSE handshake example:

```
curl -sSN https://proquiro.com/mcp \
  -H 'accept: application/json, text/event-stream' \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",
       "params":{"protocolVersion":"2025-11-25","capabilities":{},
                 "clientInfo":{"name":"AcmeAgent","version":"1.0"}}}'
```

For non-MCP endpoints, all current Proquiro public APIs are short-lived and return a single JSON document — streaming isn't required. New endpoints that introduce long-running operations (batch document verification, multi-step pricing walkthroughs) will be added under `/api/stream/*` and documented here.

## JSON error schema

Every Proquiro public API endpoint returns a structured JSON error on failure — never an HTML error page. Agents can branch on a stable `error.code`without parsing prose. All error responses set`Content-Type: application/json` and CORS headers.

```
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Too many requests from this network. Please try again later.",
    "hint": "Limit: 5 requests per IP per hour.",
    "docs": "https://proquiro.com/developers#proquiro-public-api"
  }
}
```

Stable error codes:

- `INVALID_PAYLOAD` — request body wasn't valid JSON (HTTP 400)
- `MISSING_FIELDS` — a required field was empty (HTTP 400)
- `INVALID_EMAIL` — email failed format validation (HTTP 400)
- `DISPOSABLE_EMAIL` — email belongs to a known disposable provider (HTTP 400)
- `HONEYPOT_TRIGGERED` — the `website` field was non-empty (HTTP 400)
- `RATE_LIMITED` — IP exceeded the per-hour limit. Honor`Retry-After` (HTTP 429)
- `DUPLICATE_REQUEST` — the (email, tool) tuple was already submitted (HTTP 409)
- `NOT_FOUND` — no API endpoint matches the requested path (HTTP 404)
- `METHOD_NOT_ALLOWED` — the endpoint exists but not for this HTTP method (HTTP 405)
- `DB_NOT_CONFIGURED`, `DB_NOT_INITIALIZED`,`INTERNAL_ERROR` — server-side issues. Retry with exponential backoff (HTTP 500)
- `DB_UNAVAILABLE` — the store was briefly unreachable, so the request could not be served. Retryable; carries `Retry-After` (HTTP 503)

This holds for _unknown_ API paths too: any `/api/*` request that would otherwise render an HTML error page is rewritten to this JSON envelope with`error.code = "NOT_FOUND"` or `"METHOD_NOT_ALLOWED"`.

MCP errors are returned as standard JSON-RPC 2.0 error objects with codes`-32700` (Parse error), `-32600` (Invalid Request),`-32601` (Method not found), and `-32602` (Invalid params).

## Proquiro Agent Skills Index

The Agent Skills index is a machine-readable catalogue of every agent-callable resource Proquiro publishes — calculators, checklists, the MCP server, and reference data — each with a SHA-256 digest so agents can detect changes.

</.well-known/agent-skills/index.json>

Free agent-callable land tools (also in the index): [Land Area Unit Converter](/tools/land-area-converter), [Price Per Sq Ft Calculator](/tools/price-per-sqft-calculator), [Land ROI Calculator](/tools/land-roi-calculator), [Guideline Value Checker](/tools/guideline-value-checker), [Land Acquisition Cost Calculator](/tools/land-acquisition-cost-calculator), plus due-diligence, site visit, document-readiness, and title-risk checklists under[/tools](/tools/land-due-diligence-checklist).

## Proquiro `llms.txt`

`llms.txt` is the canonical entry point for AI crawlers. It links every public Proquiro surface — product pages, free tools, the blog, glossary, MCP server, OpenAPI spec, and discovery endpoints — in a deterministic order.

</llms.txt>

Crawl rules and content signals are declared in</robots.txt>. The XML sitemap index lives at</sitemap-index.xml>.

## Markdown content negotiation

Every HTML page on `proquiro.com` can be requested as Markdown by sending an`Accept: text/markdown` header. The response uses`Content-Type: text/markdown` with an `X-Markdown-Tokens` token-count hint so agents can budget context windows.

```
curl -sS https://proquiro.com/blog \
  -H 'accept: text/markdown'
```

Blog posts also support a static `.md` suffix (e.g. `/blog/encumbrance-certificate-verification-india.md`) for cache-friendly fetches.

## Questions or partner integrations

For integration questions, higher-volume API access, or co-development on agent workflows, write to [info@proquiro.com](mailto:info@proquiro.com) or use the[contact form](/contact). AI-governance and policy questions go to[ai@proquiro.com](mailto:ai@proquiro.com); see also the [Proquiro AI Policy](/ai-policy).