import requests
from typing import List, Dict, Any
class IntraceCorpusClient:
def __init__(self, api_key: str, base_url: str = "https://api.intrace.com"):
self.api_key = api_key
self.base_url = base_url
self.headers = {"X-API-Key": api_key}
def list_events(
self,
category: str = None,
event_type: str = None,
country: str = None,
date_from: str = None,
date_to: str = None,
page: int = 1,
page_size: int = 50
) -> Dict[str, Any]:
"""List events with optional filters."""
params = {
"page": page,
"page_size": page_size
}
if category:
params["event_category"] = category
if event_type:
params["event_type"] = event_type
if country:
params["country"] = country
if date_from:
params["date_from"] = date_from
if date_to:
params["date_to"] = date_to
response = requests.get(
f"{self.base_url}/v1/corpus/events",
headers=self.headers,
params=params
)
response.raise_for_status()
return response.json()
def get_event(self, event_id: str) -> Dict[str, Any]:
"""Get a single event by ID."""
response = requests.get(
f"{self.base_url}/v1/corpus/events/{event_id}",
headers=self.headers
)
response.raise_for_status()
return response.json()
def export_events(
self,
format: str = "csv",
**filters
) -> bytes:
"""Export events in specified format."""
params = {"format": format, **filters}
response = requests.get(
f"{self.base_url}/v1/corpus/events/export",
headers=self.headers,
params=params
)
response.raise_for_status()
return response.content
# Usage
client = IntraceCorpusClient(api_key="your-api-key")
events = client.list_events(category="cyber", country="United States")
print(f"Found {events['total']} events")