Developer APIs

Complete reference for AI coders, autonomous agents, and custom integrations.

Base URL
http://localhost:8000
OpenAPI Schema
/openapi.json
Health Check
/health

For AI Coding Assistants

Works with Cursor, GitHub Copilot, Gemini Code, and any LLM-powered IDE. Use the snippets below as system-prompt context.

Step 1 — Provide this schema to your AI

Tell the AI that any extracted price/product data must match this structure before submitting:

{
  "url":            "https://www.econet.co.zw/usd-data-bundles",
  "category":       "telecoms",
  "extractor_type": "auto",      // "auto" | "generic" | "telecom" | "banking"
  "store_result":   true
}
Step 2 — Submit to the Scraper Endpoint

Your AI should generate and run this code after scraping a URL:

import httpx

# Trigger real-time extraction
resp = httpx.post(
    "http://localhost:8000/api/v1/manual-scrape/",
    json={
        "url": "https://www.econet.co.zw/usd-data-bundles",
        "category": "telecoms",
        "extractor_type": "auto",
        "store_result": True
    },
    timeout=60
)
data = resp.json()
print(f"Extracted {len(data.get('items', []))} items")
Step 3 — Read Back Structured Records
import httpx

# Fetch last 20 telecom records
records = httpx.get(
    "http://localhost:8000/api/v1/records/",
    params={"category": "telecoms", "limit": 20}
).json()

for r in records:
    print(f"{r['entity_name']} | {r['title']} | {r['price_currency']} {r['price_value']}")
Pro tip: Paste the OpenAPI schema from /openapi.json directly into your AI coding assistant — it will auto-generate fully typed client code in any language.

For Autonomous Agents

Built for LangChain, CrewAI, OpenAI Agents SDK, AutoGPT, and custom agent frameworks.

LangChain Tool Definitions

Copy and register these as agent tools at startup:

from langchain.tools import tool
import httpx

BASE = "http://localhost:8000"

@tool
def scrape_url(url: str, category: str = "auto") -> dict:
    """Trigger real-time price & product intelligence extraction from any institutional URL.
    Returns structured records with pricing, category, confidence score and entity info.
    Args:
        url: The target page URL to scrape (e.g. 'https://econet.co.zw/usd-data-bundles')
        category: Sector label ('telecoms', 'banking', 'insurance', 'retail')
    """
    resp = httpx.post(f"{BASE}/api/v1/manual-scrape/",
                      json={"url": url, "category": category, "extractor_type": "auto"},
                      timeout=90)
    return resp.json()

@tool
def get_records(category: str = None, market: str = None, limit: int = 50) -> list:
    """Retrieve already-extracted and stored intelligence records.
    Useful for comparing prices, detecting changes, or feeding analysis pipelines.
    Args:
        category: Filter by sector (optional)
        market:   Filter by market geography (optional)
        limit:    Maximum records to return (default 50)
    """
    params = {"limit": limit}
    if category: params["category"] = category
    if market:   params["market"]   = market
    return httpx.get(f"{BASE}/api/v1/records/", params=params).json()

@tool
def list_sources() -> list:
    """Get all configured crawling sources — their URLs, categories, and schedules.
    Use this before choosing which URL to scrape."""
    return httpx.get(f"{BASE}/api/v1/sources/").json()

@tool
def get_organizations(category: str = None) -> list:
    """Browse the registry of tracked Zimbabwean institutional entities.
    Returns names, slugs, categories, and latest change events."""
    params = {"category": category} if category else {}
    return httpx.get(f"{BASE}/api/v1/organizations/", params=params).json()
Webhook Subscriptions (Real-time Alerts)

Let the platform notify your agent when new data arrives instead of polling:

import httpx

# Subscribe your agent's callback URL
httpx.post("http://localhost:8000/api/v1/webhook-targets/", json={
    "name":         "My Agent Hook",
    "url":          "https://my-agent.example.com/on-new-record",
    "secret":       "my-hmac-secret",
    "is_active":    True
})

# List active subscriptions
subs = httpx.get("http://localhost:8000/api/v1/webhook-targets/").json()
print(subs)
Recommended Agent Workflow
1
Boot
Call GET /api/v1/sources/ to discover which URLs are tracked and what categories exist.
2
Crawl
Trigger POST /api/v1/manual-scrape/ for each URL. Store job IDs.
3
Analyse
Query GET /api/v1/records/ with category/market filters to get structured data.
4
React
Subscribe via POST /api/v1/webhook-targets/ so you receive alerts on new scrapes.
v1Core Intelligence APIs
Method Endpoint Description Key Params
GET /api/v1/records/ Fetch extracted intelligence records category, market, limit
POST /api/v1/manual-scrape/ Trigger real-time extraction on a URL url, category, extractor_type
GET /api/v1/sources/ List all configured sources category, market
POST /api/v1/sources/ Register a new data source name, base_url, category
GET /api/v1/organizations/ Browse tracked entities by sector category, search
GET /api/v1/organizations/{slug}/ Get single org profile & change events —
GET /api/v1/webhook-targets/ List webhook subscriptions —
POST /api/v1/webhook-targets/ Subscribe to real-time record events url, name, secret
DELETE /api/v1/webhook-targets/{id}/ Remove a webhook subscription —
GET /api/v1/delivery-attempts/ Inspect webhook delivery logs target_id, success
GET /api/v1/health/ Health check — liveness probe —
v2Market Data APIs
Method Endpoint Description Key Params
GET /api/v2/market-data/ Live exchange rates & market telemetry currency, period
ExportData Export APIs
Method Endpoint Description Format
GET /export/records Download all intelligence records .xlsx
GET /export/api-docs Download this developer guide .md