# Geeks360 agent API

Public API for AI agents: services, audits, industries, case studies, pricing and a spam-safe inquiry endpoint. No authentication.

- Base URL: <https://geeks360.net/wp-json/geeks360-agent/v1>
- OpenAPI 3.1: <https://geeks360.net/openapi.json>
- MCP server (Streamable HTTP, JSON-RPC over POST): <https://geeks360.net/mcp>
- A2A agent (JSON-RPC `message/send`): <https://geeks360.net/wp-json/geeks360-agent/v1/a2a>
- NLWeb: `GET https://geeks360.net/ask?query=...`
- Full profile for LLMs: <https://geeks360.net/llms-full.txt>

## Endpoints

| Method | Path | What it returns |
|---|---|---|
| GET | /company | Company facts |
| GET | /services, /services/{id} | Services |
| GET | /audits, /audits/{id} | Audits |
| GET | /industries, /industries/{id} | Industries |
| GET | /case-studies, /case-studies/{id} | Case studies |
| GET | /pricing | Pricing of every service and audit |
| GET | /search?q= | Keyword search |
| POST | /inquiries | Send an inquiry on behalf of a person |
| GET | /health | Status |

## Errors

JSON: `{"error": {"code", "message", "hint", "docs"}}` with HTTP 400, 404, 409, 413, 422, 429 or 503.

## Sandbox and retries

- Sandbox: add `"dry_run": true` to validate an inquiry without storing or sending anything (no limits used).
- Retries: send an `Idempotency-Key` header; repeating the same key and body within 24 hours returns the first response instead of a second inquiry.
- Short alias: `https://geeks360.net/api/v1/...` equals `https://geeks360.net/wp-json/geeks360-agent/v1/...`.

## Versioning and deprecation

The version is part of the path (`/v1`). Breaking changes ship as a new version. A retired version keeps working for at least 90 days and its responses carry `Deprecation` and `Sunset` headers during that time.

## Sending an inquiry

```
POST https://geeks360.net/wp-json/geeks360-agent/v1/inquiries
Content-Type: application/json

{"name": "Jane Doe", "email": "jane@example.com", "company": "Example Inc",
 "message": "We need Google Ads and SEO for 3 dental clinics in Miami.",
 "services": ["paid-ads"], "budget": "5k_10k", "agent_name": "ExampleAssistant",
 "on_behalf_of_human": true}
```

Only send inquiries a real person asked for, with their real contact details. Limits: a few per IP and per email per day.
