OpenFetch Protocol v1.0

Horizon Standard

Technical documentation for integrating the Horizon Agentic Readiness scoring engine into external AI agents, crawlers, and developer toolchains.

Overview

The OpenFetch Protocol is an open infrastructure standard for measuring and improving "Agentic Readiness" — the degree to which a website can be efficiently understood, navigated, and cited by AI agents, LLMs, and autonomous systems.

The scoring engine analyzes 20+ signals across three dimensions: Readability (how well an agent can parse structure and meaning), Actionability (whether the agent can trigger meaningful actions), and Trust (how reliably provenance and identity can be verified).

📖
Readability (40%)

Semantic HTML, heading hierarchy, lang attr, alt text, word count

Actionability (30%)

Forms, API refs, MCP headers, llms.txt, interaction hooks

🔐
Trust (30%)

JSON-LD, OpenGraph, Twitter Card, canonical URL, sitemap

Authentication

The POST /api/analyze endpoint supports optional API key authentication via the x-api-key request header. When a key is present, it is validated before processing. Unauthenticated requests from browser sessions are allowed.

Generate API keys in the Developer Portal. Keys follow the format oh_live_ + 64 hex characters.

bash
# With API key (programmatic access)
curl -X POST https://open-horizon.replit.app/api/analyze \
  -H "Content-Type: application/json" \
  -H "x-api-key: oh_live_YOUR_KEY_HERE" \
  -d '{"url": "https://example.com"}'

# Without key (browser / UI session)
curl -X POST /api/analyze \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

Security Note

Never expose your API key in client-side JavaScript or public repositories. Treat it as a secret. Revoke and rotate keys immediately if compromised.

Endpoints

POST/api/analyze🔑 Optional Auth

Score a URL's agentic readiness using Gemini AI. Returns a structured report with overall score, dimension breakdown, failed/passed metrics, AI perspectives, token efficiency data, and a Horizon Passport excerpt.

Request Body

urlstringrequired

The full URL to analyze (e.g. https://example.com). Prepends https:// if scheme is omitted.

Response Fields

overallScorenumber 0–100

Composite Horizon Score: readability×0.4 + actionability×0.3 + trust×0.3.

breakdownobject

Per-dimension scores and labels: { readability, actionability, trust } each with { score, label }.

failedMetricsarray

Metrics that failed, each with { id, label, severity: high|medium|low }.

passedMetricsarray

Metrics that passed, each with { id, label }.

agentViewstring

2–3 sentence AI perspective on what an LLM agent experiences crawling this page.

humanViewstring

2–3 sentence contrast — what a human intuitively understands that the agent cannot.

htmlExcerptstring

First 1,400 chars of the page's <head> HTML for before/after comparison.

extractedMetaobject

Structured metadata: title, description, h1Tags, h2Tags, schemaTypes, lang, wordCount, canonical, ogTitle, twitterCard.

tokenDataobject

Compute efficiency: { originalTokens, optimizedTokens, speedupFactor, percentSmaller }.

recentScansarray

Last 12 scanned domains for the live ticker: [{ domain, score, ts }].

json
// Example response
{
  "success": true,
  "url": "https://stripe.com",
  "overallScore": 88,
  "breakdown": {
    "readability": { "score": 90, "label": "Excellent" },
    "actionability": { "score": 65, "label": "Good" },
    "trust": { "score": 96, "label": "Excellent" }
  },
  "failedMetrics": [
    { "id": "no_llms_txt", "label": "No llms.txt file detected", "severity": "medium" }
  ],
  "passedMetrics": [
    { "id": "structured_data", "label": "JSON-LD structured data present" }
  ],
  "agentView": "The agent finds rich OpenGraph metadata and...",
  "humanView": "A visitor immediately recognizes the brand...",
  "tokenData": {
    "originalTokens": 18482,
    "optimizedTokens": 220,
    "speedupFactor": 84,
    "percentSmaller": 99
  }
}
GET/api/leaderboardNo auth required

Returns the Global Agent Registry — the top 50 most AI-ready sites ordered by Horizon Score. Featured sites are pinned to the top.

bash
curl https://open-horizon.replit.app/api/leaderboard
json
{
  "entries": [
    {
      "domain": "vercel.com",
      "score": 91,
      "readability": 88,
      "actionability": 78,
      "trust": 95,
      "title": "Vercel – Frontend Cloud",
      "verified": true,
      "featured": true,
      "ts": 1746000000000
    }
  ]
}

Horizon Passport Schema

A Horizon Passport is a minimal JSON-LD document derived from a page's metadata. It replaces the raw HTML payload an AI agent would otherwise need to parse, reducing token cost by up to 99% while preserving all semantically meaningful signals.

The standard Passport emits a Schema.org @graph with three entities:

json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com",
      "name": "Example Site",
      "description": "A brief, AI-readable description",
      "inLanguage": "en",
      "potentialAction": {
        "@type": "SearchAction",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://example.com/search?q={search_term_string}"
        },
        "query-input": "required name=search_term_string"
      }
    },
    {
      "@type": "WebPage",
      "@id": "https://example.com/page#webpage",
      "url": "https://example.com/page",
      "isPartOf": { "@id": "https://example.com/#website" },
      "name": "Page Title",
      "description": "Page-level description",
      "headline": "Primary H1 heading",
      "inLanguage": "en",
      "canonicalUrl": "https://example.com/page",
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": ["h1", "h2", "p"]
      }
    }
  ]
}

Add the Horizon Passport to your page inside a <script type="application/ld+json"> tag. AI agents that are Horizon-aware will consume this graph instead of parsing raw HTML.

Agent Integration

External AI agents can integrate with the Horizon scoring engine to make real-time navigation decisions. The recommended pattern:

python
# Python: Score a URL before deciding whether to crawl it
import requests

def horizon_score(url: str, api_key: str) -> dict:
    resp = requests.post(
        "https://open-horizon.replit.app/api/analyze",
        headers={
            "Content-Type": "application/json",
            "x-api-key": api_key,
        },
        json={"url": url},
        timeout=30,
    )
    resp.raise_for_status()
    return resp.json()

# In your agent loop:
result = horizon_score("https://stripe.com", api_key="oh_live_...")
if result["overallScore"] >= 70:
    # High-confidence crawl — use extractedMeta directly
    meta = result["extractedMeta"]
    title = meta["title"]
    description = meta["description"]
else:
    # Low score — fall back to full HTML parse
    pass
javascript
// Node.js / TypeScript agent integration
async function getHorizonPassport(url) {
  const res = await fetch("/api/analyze", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": process.env.HORIZON_API_KEY,
    },
    body: JSON.stringify({ url }),
  });

  const data = await res.json();

  return {
    score: data.overallScore,
    meta: data.extractedMeta,
    efficiency: data.tokenData,
    // Use agentView for agent-facing summaries
    agentSummary: data.agentView,
  };
}

llms.txt Standard

The llms.txt standard (proposed 2025) allows websites to declare themselves as AI-agent-friendly by publishing a plain-text manifest at /llms.txt. Horizon detects and rewards the presence of this file in the Actionability score.

text
# llms.txt — example for yourdomain.com
# This file declares AI agent access policies for this domain.

> Summary: SaaS platform for project management. Agent-friendly.
> Contact: agents@yourdomain.com
> License: CC-BY 4.0

## Permitted
- Crawl: /docs, /blog, /api-reference
- Cite: all public pages
- Index: yes

## Restricted
- Crawl: /admin, /dashboard, /account
- Login required: /app

## Horizon Passport
- JSON-LD at: /horizon-passport.json
- Schema version: 1.0

Publishing a llms.txt file is a signal to AI agents that your site is Horizon-compliant and increases your Actionability score by up to 15 points.

Standards Compliance

💳AP2 · Agent Payments 2026

OpenFetch is compliant with the Agent Payments 2026 standard, enabling agentic payment flows to be triggered by structured data declared in Horizon Passports.

🔗MCP · Model Context Protocol 2026

Horizon scores MCP header presence as part of the Actionability dimension. Sites with MCP-ready endpoints receive bonus signal weight.

📋Schema.org JSON-LD 1.1

All generated Horizon Passports conform to Schema.org vocabulary at version 1.1, using @graph notation and explicit @id references for full interoperability.

🃏OpenGraph / Twitter Card

Social metadata is scored under Trust. Sites without OpenGraph lose up to 12 Trust points; missing Twitter Card costs up to 8 points.

Rate Limits

TierRate LimitMax KeysSupport
Free60 req / hour3Community
Pro1,000 req / hour20Email
EnterpriseUnlimitedUnlimitedDedicated SLA

Rate limit headers are returned with every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.