API Reference

The India CyberThreat Pulse API provides programmatic access to real-time Indian cybersecurity threat intelligence — including incidents, CERT-In advisories, and Indicators of Compromise (IOCs).

Format

REST / JSON

Auth

Bearer Token

Version

v1 (Stable)

Quick Start: Get your API key from the Pricing page (B2B or Enterprise tier), then use it as a Bearer token in your requests.

Authentication

All API requests require a valid API key passed as a Bearer token in the Authorization header. API keys are issued to B2B and Enterprise subscribers.

http
GET /api/v1/incidents HTTP/1.1
Host: pulse.krishnamuduli.co.in
Authorization: Bearer your_api_key_here
Content-Type: application/json

⚠ Security: Never expose your API key in client-side code, public repositories, or browser requests. Use server-side API calls only.

Endpoints

Rate Limits

Rate limits are enforced per API key. Exceeding the limit returns a 429 Too Many Requests response.

PlanPriceRequests/MonthRequests/MinuteFeatures
Community₹0No API accessDashboard only (48hr delay)
Professional₹999/moNo API accessReal-time dashboard + email digest
B2B₹5,000/mo5,00030Full API: incidents + CERT-In + IOCs
Enterprise₹24,999/moUnlimited120Unlimited API + STIX/TAXII + SLA

Error Codes

StatusCodeDescription
200OKSuccessful request. Response body contains data.
401UnauthorizedMissing or invalid API key. Include Bearer token in Authorization header.
403ForbiddenAPI key is valid but does not have access. Upgrade to B2B or Enterprise tier.
429Too Many RequestsRate limit exceeded. Wait and retry. Check X-RateLimit-Reset header.
500Internal Server ErrorServer-side error. Retry after 30 seconds. Contact support if persistent.

Code Examples

Python

python
import requests

API_KEY = "your_api_key_here"
BASE_URL = "https://pulse.krishnamuduli.co.in/api/v1"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# Fetch critical incidents from the BFSI sector
response = requests.get(
    f"{BASE_URL}/incidents",
    headers=headers,
    params={
        "severity": "Critical",
        "sector": "BFSI",
        "limit": 10
    }
)

data = response.json()
print(f"Found {data['meta']['count']} critical BFSI incidents")

for incident in data["data"]:
    print(f"  [{incident['severity']}] {incident['title']}")
    print(f"    Actor: {incident['actor']}")
    print(f"    Date:  {incident['created_at']}")
    print()

JavaScript (Node.js)

javascript
const API_KEY = "your_api_key_here";
const BASE_URL = "https://pulse.krishnamuduli.co.in/api/v1";

async function fetchThreats() {
  const response = await fetch(
    `${BASE_URL}/incidents?severity=Critical&limit=10`,
    {
      headers: {
        "Authorization": `Bearer ${API_KEY}`,
        "Content-Type": "application/json",
      },
    }
  );

  const { meta, data } = await response.json();
  console.log(`Found ${meta.count} critical incidents`);

  data.forEach((incident) => {
    console.log(`[${incident.severity}] ${incident.title}`);
    console.log(`  Actor: ${incident.actor}`);
  });
}

fetchThreats();

cURL

bash
# Fetch all IOCs with confidence > 80%
curl -s "https://pulse.krishnamuduli.co.in/api/v1/iocs?min_confidence=80&limit=20" \
  -H "Authorization: Bearer your_api_key_here" | jq .

# Fetch latest CERT-In advisories
curl -s "https://pulse.krishnamuduli.co.in/api/v1/cert-alerts?limit=5" \
  -H "Authorization: Bearer your_api_key_here" | jq '.data[].title'

# Export incidents to CSV (with jq)
curl -s "https://pulse.krishnamuduli.co.in/api/v1/incidents?limit=100" \
  -H "Authorization: Bearer your_api_key_here" | \
  jq -r '.data[] | [.created_at, .severity, .actor, .title] | @csv'