For developers & agents

One tool call. Ranked offers. Transparent scoring.

Aggressive.ai exposes a public, JSON HTTP API designed to be wrapped as a tool inside any LLM-agent framework — OpenAI, Anthropic, LangGraph, Vercel AI SDK, custom orchestrators. The same engine powers the web UI; there is no second-tier surface for agents.

POST /api/public/optimize

Run the engine end-to-end
POST /api/public/optimize
Content-Type: application/json

{
  "category": "broadband",
  "location": "Dartford, London",
  "minPerformance": 100,
  "maxMonthly": 35,
  "maxContractMonths": 24,
  "minRating": 4,
  "mode": "aggressive"
}
{
  "taskSpec": { ... },
  "top": {
    "providerName": "Community Fibre",
    "planName": "Full Fibre 150",
    "monthlyPrice": 22,
    "totalCost12mo": 264,
    "performance": { "downloadMbps": 150, "uploadMbps": 150 },
    "reviewRating": 4.6,
    "reviewCount": 6890,
    "friction": { "contractMonths": 24 },
    "score": {
      "price": 94, "performance": 92, "reviews": 88,
      "availability": 90, "frictionPenalty": 12,
      "aggressive": 88,
      "factors": ["Best-in-class price", "Strong review history"]
    },
    "explanation": "Community Fibre — Full Fibre 150 scored 88/100 in aggressive mode..."
  },
  "offers": [ ... ],
  "pluginsUsed": [
    { "id": "live-uk-broadband-llm", "ok": true, "ms": 1820, "count": 8 },
    { "id": "uk-broadband-baseline", "ok": true, "ms": 30, "count": 8 }
  ]
}

GET /api/public/plugins

Discover pricing plugins & key pool health
GET /api/public/plugins

→ {
  "plugins": [ { "id": "live-uk-broadband-llm", "category": "broadband", "geography": "UK", ... } ],
  "groq": { "total": 4, "active": 4, "cooling": 0 }
}

Tool definition for LLM agents

Drop into your function-calling spec
{
  "name": "get_best_offers",
  "description": "Given user constraints and preferences, returns ranked offers optimized for best price under quality constraints.",
  "input_schema": {
    "type": "object",
    "required": ["location", "category"],
    "properties": {
      "category": { "type": "string", "enum": ["broadband","energy","saas","compute"] },
      "location": { "type": "string", "description": "Postcode or city" },
      "minPerformance": { "type": "number", "description": "e.g. Mbps" },
      "maxMonthly": { "type": "number" },
      "maxContractMonths": { "type": "number" },
      "minRating": { "type": "number", "minimum": 0, "maximum": 5 },
      "mode": { "type": "string", "enum": ["aggressive","balanced","premium"], "default": "aggressive" }
    }
  }
}

Scoring modes

One knob, three behaviors
aggressive
Aggressive savings
Price 55%, reviews 20%, performance 12%, friction -8%.
balanced
Balanced quality
Price 30%, performance 25%, reviews 25%, friction -10%.
premium
Premium performance
Performance 50%, price 15%, reviews 20%, friction -7%.

Rotating Groq key pool

Resilient by default

The intent parser and live-LLM pricing plugin route through a server-side Groq key pool. Add up to N keys as GROQ_API_KEY_1, GROQ_API_KEY_2, … and the engine round-robins between them, cools any key that returns 429/401, and transparently retries on the next available key. No client-side key exposure; rotation is invisible to callers.