Specification

manifest.json

Wire-level reference for the agents402 manifest. This is the contract between a publisher and any conforming agent.


Endpoint

PropertyValue
Path/.well-known/agents402.json
MethodGET
AuthNone — manifest is fully public
Status (success)200 OK
Status (not implemented)404 Not Found

Required headers

HeaderValueNotes
Content-Typeapplication/jsonMUST be application/json. UTF-8 encoded.
Access-Control-Allow-Origin*Manifest must be CORS-readable so browser-based agents can fetch it.
Cache-Controlmax-age ≤ 3600Recommended. Manifests are expected to change infrequently but not be immutable.

JSON schema

agents402-manifest-v0.1.schema.json
json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type":    "object",
  "required": ["version", "service", "actions", "receipts"],
  "properties": {
    "version": { "const": "0.1" },
    "service": {
      "type": "object",
      "required": ["name", "homepage"],
      "properties": {
        "name":              { "type": "string", "maxLength": 256 },
        "description":       { "type": "string", "maxLength": 1024 },
        "homepage":          { "type": "string", "format": "uri" },
        "lightning_address": { "type": "string", "maxLength": 256 }
      }
    },
    "actions": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": ["id", "type", "endpoint", "method", "price_msats"],
        "properties": {
          "id":           { "type": "string", "pattern": "^[a-z][a-z0-9_.-]*$", "maxLength": 128 },
          "type":         { "enum": ["web_access", "structured_data", "site_agent_query", "verification"] },
          "title":        { "type": "string", "maxLength": 256 },
          "description":  { "type": "string", "maxLength": 1024 },
          "endpoint":     { "type": "string", "format": "uri" },
          "method":       { "const": "POST" },
          "price_msats":  { "type": "integer", "minimum": 0, "maximum": 1000000000 },
          "input_schema": { "type": "object" },
          "risk":         { "enum": ["low", "medium", "high"] }
        }
      }
    },
    "receipts": {
      "type": "object",
      "required": ["pubkey_hex", "algorithm"],
      "properties": {
        "pubkey_hex": { "type": "string", "pattern": "^[0-9a-f]+$" },
        "algorithm":  { "const": "ed25519" }
      }
    }
  }
}

Validation rules

RuleReason
Action ids MUST match ^[a-z][a-z0-9_.-]*$.Lowercase, dot-separated. Stable identifiers across reputation systems.
Action ids MUST be unique within a manifest.Receipts reference id; collisions create ambiguity.
Endpoint URLs MUST be absolute and use https.Plaintext discovery is acceptable; payment redirects are not.
Endpoint hostnames MUST share an eTLD+1 with the manifest URL.Prevents a site from publishing endpoints at a third party.
Service pubkey MUST be a valid Ed25519 SPKI in hex.Verification with standard libraries; no per-impl key formats.

Error responses

A publisher that does not support agents402 SHOULD return 404 Not Found for the manifest path. Other statuses are reserved:

StatusMeaning
404Publisher does not support agents402 (or temporarily disabled).
503Manifest temporarily unavailable; agents may retry with backoff.
410Publisher has permanently retired agents402 support.
Next
Wire format
Exact HTTP request and response shapes for the 402 challenge and retry.
agents402.org / 2026
Open protocol · v0.1