Gov APIblockchain.gov.in ↗
Access NIC India blockchain statistics, per-chain breakdowns, and government case studies via 3 endpoints covering land records, judiciary, CBSE, and more.
What is the Gov API?
The blockchain.gov.in API provides 3 endpoints to retrieve statistics and case study content from India's National Informatics Centre Blockchain platform. Use get_statistics to pull aggregate counts across all onboarded chains, get_chain_statistics to drill into per-department transaction and verification data for chains like property, judiciary, or cbse, and get_case_study to retrieve structured content for documented government use cases including LandRegistration and GSTChain.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/7738d2cf-8e2b-4fe6-a637-53fc4a450434/get_statistics' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace blockchain-gov-in-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
India Blockchain Land Records API Client
This module provides a Python client for accessing blockchain statistics and
case study information from India's National Informatics Centre Blockchain platform.
Get your API key from: https://parse.bot/settings
"""
import os
import json
from typing import Any, Optional
import requests
class ParseClient:
"""Client for interacting with the India Blockchain Land Records API via Parse."""
def __init__(self, api_key: Optional[str] = None):
"""
Initialize the Parse API client.
Args:
api_key: API key for Parse. If not provided, reads from PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "7738d2cf-8e2b-4fe6-a637-53fc4a450434"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")
def _call(self, endpoint: str, method: str = "POST", **params) -> dict[str, Any]:
"""
Make an API call to the Parse scraper.
Args:
endpoint: The endpoint name (e.g., 'get_statistics')
method: HTTP method - "GET" or "POST"
**params: Query/body parameters for the endpoint
Returns:
Parsed JSON response from the API
Raises:
requests.RequestException: If the API call fails
ValueError: If the response cannot be parsed
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}
try:
if method == "GET":
response = requests.get(url, headers=headers, params=params, timeout=10)
elif method == "POST":
response = requests.post(url, headers=headers, json=params, timeout=10)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
except requests.RequestException as e:
print(f"API call failed: {e}")
raise
def get_statistics(self) -> dict[str, Any]:
"""
Fetch overall blockchain statistics from the India Blockchain platform.
Returns statistics about blockchain products, states, departments,
documents, verifications, and per-chain breakdowns.
Returns:
Dictionary containing blockchain statistics
"""
return self._call("get_statistics", method="GET")
def get_chain_statistics(self, chain: str) -> dict[str, Any]:
"""
Fetch statistics for a specific blockchain chain.
Args:
chain: Chain identifier. Must be one of:
cbse, certificate, document, icjs, judiciary, property, sslcpuc
Returns:
Dictionary containing chain-specific statistics with transactions
and verifications breakdown by state and department
"""
return self._call("get_chain_statistics", method="GET", chain=chain)
def get_case_study(self, case_study: str) -> dict[str, Any]:
"""
Fetch and parse a case study from the India Blockchain platform.
Args:
case_study: Case study identifier. Must be one of:
BloodBank, GSTChain, LandRegistration, PDS, RemoteVoting
Returns:
Dictionary containing case study title and structured content sections
"""
return self._call("get_case_study", method="GET", case_study=case_study)
def format_indian_number(num_str: str) -> int:
"""Convert Indian numeral format string to integer."""
return int(num_str.replace(",", ""))
def main():
"""Practical workflow demonstrating the India Blockchain Land Records API."""
# Initialize the client
client = ParseClient()
print("=" * 80)
print("India Blockchain Land Records API - Practical Workflow")
print("=" * 80)
# Step 1: Get overall statistics
print("\n📊 Step 1: Fetching overall blockchain statistics...")
stats = client.get_statistics()
print(f"\n✓ Statistics as of: {stats['date']}")
print(f" • Blockchain Products: {stats['blockchain_products']}")
print(f" • States/Organizations: {stats['states_organizations']}")
print(f" • Departments Onboarded: {stats['departments_onboarded']}")
print(f" • Total Documents: {stats['total_documents']}")
print(f" • Total Verifications: {stats['total_verifications']}")
# Display sample states and departments
print(f"\n Sample States/Organizations:")
for state in stats["states"][:3]:
print(f" - {state}")
print(f"\n Sample Departments:")
for dept in stats["departments"][:3]:
print(f" - {dept}")
# Step 2: Analyze transaction applications
print("\n📈 Step 2: Transaction Applications Overview...")
if stats.get("transaction_applications"):
for app in stats["transaction_applications"]:
transaction_count = format_indian_number(app["count"])
print(f"\n {app['name']}:")
print(f" • Total Transactions: {app['count']} ({transaction_count:,})")
# Step 3: Get detailed statistics for each transaction application chain
print("\n🔗 Step 3: Analyzing Property Chain in detail...")
property_stats = client.get_chain_statistics("property")
print(f"\n✓ Property Chain Statistics (Updated: {property_stats['date']})")
# Aggregate statistics by department
dept_transactions = {}
for trans in property_stats.get("transactions", []):
dept_key = f"{trans['state_or_organization']} - {trans['department']}"
dept_transactions[dept_key] = int(trans["transaction_count"])
# Sort by transaction count
sorted_depts = sorted(dept_transactions.items(), key=lambda x: x[1], reverse=True)
print("\n Top 5 Departments by Transaction Count:")
for i, (dept, count) in enumerate(sorted_depts[:5], 1):
print(f" {i}. {dept}: {count:,} transactions")
# Step 4: Analyze verification data
print("\n✓ Verification Data:")
if property_stats.get("verifications"):
top_verification = property_stats["verifications"][0]
total_reads = format_indian_number(top_verification["total_reads"])
reads_24h = format_indian_number(top_verification["reads_last_24h"])
print(f" Top Department: {top_verification['state_or_organization']} - {top_verification['department']}")
print(f" • Total Reads (All-Time): {total_reads:,}")
print(f" • Reads (Last 24h): {reads_24h:,}")
print(f" • Daily Average: {total_reads // 365:,}")
# Step 5: Get case study information
print("\n📚 Step 5: Fetching Land Registration Case Study...")
case_study = client.get_case_study("LandRegistration")
print(f"\n✓ Case Study: {case_study['title']}")
print(f" Sections available: {len(case_study['sections'])}")
for section in case_study["sections"]:
print(f"\n 📖 {section['heading']}:")
for para in section["content"][:1]: # Show first paragraph of each section
# Truncate long paragraphs for display
preview = para[:100] + "..." if len(para) > 100 else para
print(f" {preview}")
# Step 6: Compare chains
print("\n" + "=" * 80)
print("📊 Step 6: Comparing Multiple Chains")
print("=" * 80)
chains_to_compare = ["property", "document"]
chain_comparison = {}
for chain_name in chains_to_compare:
try:
chain_data = client.get_chain_statistics(chain_name)
transaction_count = sum(
int(t["transaction_count"]) for t in chain_data.get("transactions", [])
)
verification_count = sum(
format_indian_number(v["total_reads"]) for v in chain_data.get("verifications", [])
)
chain_comparison[chain_name] = {
"transactions": transaction_count,
"verifications": verification_count,
}
except Exception as e:
print(f" ⚠ Could not fetch {chain_name} chain: {e}")
print("\nChain Comparison Summary:")
for chain, metrics in chain_comparison.items():
print(f"\n {chain.upper()} Chain:")
print(f" • Total Transactions: {metrics['transactions']:,}")
print(f" • Total Verifications: {metrics['verifications']:,}")
print("\n" + "=" * 80)
print("✅ Workflow completed successfully!")
print("=" * 80)
if __name__ == "__main__":
main()Fetch overall blockchain statistics from the India Blockchain platform. Returns summary counts of products, states, departments, total documents/verifications, and per-chain breakdowns of transactions and reads.
No input parameters required.
{
"type": "object",
"fields": {
"date": "string - date of last update in DD-MM-YYYY format",
"states": "array of state/organization names",
"departments": "array of department names",
"total_documents": "string - total documents on blockchain (Indian numeral format)",
"read_applications": "array of objects with name, total_reads, reads_last_24h per chain",
"blockchain_products": "integer - number of blockchain products",
"total_verifications": "string - total verifications on blockchain (Indian numeral format)",
"states_organizations": "integer - number of states/organizations onboarded",
"departments_onboarded": "integer - number of departments onboarded",
"transaction_applications": "array of objects with name and count per chain"
},
"sample": {
"date": "08-06-2026",
"states": [
"Central Board of Secondary Education",
"ANDHRA PRADESH",
"CHHATTISGARH"
],
"departments": [
"Central Board of Secondary Education",
"KARNATAKA - Revenue Department"
],
"total_documents": "10,46,74,542",
"read_applications": [
{
"name": "Property Chain",
"total_reads": "42,48,21,783",
"reads_last_24h": "32,96,004"
}
],
"blockchain_products": 6,
"total_verifications": "42,64,04,462",
"states_organizations": 12,
"departments_onboarded": 18,
"transaction_applications": [
{
"name": "Property Chain",
"count": "2,10,49,379"
}
]
}
}About the Gov API
What the API Returns
The get_statistics endpoint returns a snapshot of the entire NIC Blockchain platform: total documents and verifications in Indian numeral format, counts of onboarded states/organizations and departments, a list of all active chains with their transaction counts, and per-chain read volumes including reads_last_24h. A date field in DD-MM-YYYY format indicates when the data was last updated.
Chain-Level Detail
get_chain_statistics accepts a chain parameter from a fixed set of identifiers — cbse, certificate, document, icjs, judiciary, property, and sslcpuc — and returns two arrays: transactions broken down by state_or_organization and department, and verifications with matching fields plus total_reads and reads_last_24h. This makes it possible to compare, for example, how many property chain transactions originate from different state registries versus how often those records are verified.
Case Study Content
get_case_study accepts one of five identifiers — BloodBank, GSTChain, LandRegistration, PDS, RemoteVoting — and returns a title, a case_study_id echo, and a sections array where each element carries a heading and a content array of paragraph strings. This gives programmatic access to the policy rationale, implementation details, and outcomes documented for each government blockchain program.
Coverage Notes
All three endpoints reflect publicly available data from blockchain.gov.in. Counts for total documents and verifications use Indian numeral formatting (e.g., lakhs and crores), so downstream code should account for that when parsing or displaying figures.
The Gov API is a managed, monitored endpoint for blockchain.gov.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when blockchain.gov.in changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official blockchain.gov.in API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track daily verification activity on the property chain to monitor land record usage across Indian states
- Build a dashboard comparing transaction counts across all seven NIC blockchain chains using
get_statistics - Identify which state departments are generating the most CBSE certificate transactions via
get_chain_statistics - Extract structured text from the LandRegistration case study for policy research or government procurement analysis
- Monitor the
reads_last_24hfield per chain to detect spikes in document verification demand - Enumerate all onboarded states and departments to map blockchain adoption across Indian government bodies
- Populate a research report with case study content from GSTChain or RemoteVoting using the
sectionsresponse structure
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does blockchain.gov.in have an official developer API?+
What does `get_chain_statistics` return that `get_statistics` does not?+
get_statistics gives aggregate counts across all chains. get_chain_statistics goes further: for a specific chain like property or judiciary, it returns per-row breakdowns listing each state_or_organization, department, transaction_count, total_reads, and reads_last_24h — granularity that the top-level endpoint does not include.How current is the data returned by these endpoints?+
date field in DD-MM-YYYY format reflecting the last-updated timestamp shown on the source platform. There is no sub-daily timestamp granularity beyond the reads_last_24h field in the statistics endpoints, so the data cadence depends on how frequently the source platform publishes updates.Can I retrieve historical statistics or time-series data for a chain?+
start_date or end_date parameter on any endpoint. You can fork this API on Parse and revise it to add an endpoint that periodically stores and retrieves historical snapshots.Are all NIC blockchain programs covered, or only the five listed case studies?+
get_case_study endpoint covers exactly five identifiers: BloodBank, GSTChain, LandRegistration, PDS, and RemoteVoting. Other programs documented on the platform are not currently included. You can fork this API on Parse and revise it to add additional case study identifiers if the source pages follow the same structure.