omnichannel.cx API & agent developer docs
Everything on omnichannel.cx is public and readable by software. The API is read-only, with no keys, accounts or sandbox to set up. The one write action, sending an enquiry, always needs a human to complete verification. This page covers each surface. The machine-readable source of truth is the OpenAPI specification.
Conventions
- Base URL
https://omnichannel.cx. No authentication; CORS is open on public endpoints. - Every
/api/*,/mcpand/askresponse carriesRateLimit-Limit,RateLimit-RemainingandRateLimit-Reset. A 429 addsRetry-After. - REST errors are JSON
{ error, code, hint }, never HTML. - Versioning: the surface is additive (
API-Version: 1). Breaking changes ship under/api/v2/. Deprecations getDeprecationandSunsetheaders at least 90 days ahead.
Search the site
Semantic and keyword search over every public page, with reranking. It returns ranked snippets and their source URLs. It is retrieval only and never generates answers.
GET /api/search?q=customer%20experience%20maturity&limit=5
{ "query": "customer experience maturity",
"results": [{ "url": "https://omnichannel.cx/...", "snippet": "...", "score": 0.82 }] }Read any page as Markdown
Request any page with Accept: text/markdown, or fetch its .md twin, e.g. /services.md. Each Markdown page opens with frontmatter giving its title, description, canonical URL and last-updated date. llms.txt lists every page.
MCP server
A read-only remote Model Context Protocol server over Streamable HTTP at https://omnichannel.cx/mcp. Its tools are search_site and get_page. There is no authentication. The server card is at /mcp/server-card.
{
"mcpServers": {
"omnichannel": { "type": "http", "url": "https://omnichannel.cx/mcp" }
}
}NLWeb
An NLWeb v0.55 /ask endpoint over the same index. It supports list mode only and never summarises. Set prefer.streaming for Server-Sent Events.
POST /ask
{ "query": { "text": "who helps with contact centre AI in Australia?" },
"prefer": { "streaming": false } }In-browser tools (WebMCP)
In browsers with WebMCP, every page registers search_site. The contact page also registers prepare_contact_enquiry, which fills in the form for the visitor to review. It never submits.
Contact enquiries (humans only)
POST /api/contact delivers an enquiry, but it needs a Cloudflare Turnstile token from a person completing the check on /contact. Agents can prepare the enquiry and a human submits it. Send an Idempotency-Key header (one UUID per enquiry) so a retry never sends it twice. A repeat within 24 hours replays the original ref.
Discovery documents
- API catalog (RFC 9727)
- ARD manifest and AI catalog
- Agent Skills index (v0.2.0)
- Schema map (NLWeb Schema Feeds) for the site's schema.org data
- A2A agent card (discovery only)
- security.txt for reporting vulnerabilities