{
  "x402Version": 2,
  "name": "Kairostamp",
  "description": "Paid machine-to-machine web evidence API. Fetches one public http/https URL server-side and returns a time-stamped, tamper-evident receipt; the change-check endpoint also compares it against a caller-supplied baseline.",
  "freeTrial": {
    "available": true,
    "calls": 1,
    "scope": "one free call per wallet address, on any GET /api/v1/* endpoint",
    "claim_url": "https://kairostamp.com/api/public/trial",
    "claim_method": "POST",
    "claim_body": {
      "wallet": "0x<your payer address>"
    },
    "redeem_header": "X-Kairostamp-Trial",
    "note": "No signature, account or payment required to claim. One grant per address, forever."
  },
  "documentation": "https://kairostamp.com/docs",
  "discovery": "https://kairostamp.com/api/public/discovery",
  "openapi": "https://kairostamp.com/openapi.json",
  "mcp": "https://kairostamp.com/mcp",
  "resources": [
    {
      "resource": "https://kairostamp.com/api/v1/snapshot",
      "type": "http",
      "method": "POST",
      "description": "Kairostamp evidence snapshot: server-side fetch of one public http/https URL, returning a time-stamped receipt with the response status, content type, byte length, SHA-256 of the body, redirect chain, a text preview, and a tamper-evident hash-chain entry.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.05",
      "maxAmountRequired": "50000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "receipt_id",
          "chain_hash",
          "receipt"
        ],
        "properties": {
          "receipt_id": {
            "type": "string",
            "format": "uuid",
            "description": "Evidence receipt identifier."
          },
          "previous_chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "SHA-256 hash-chain value of the previous receipt, or null for the first entry."
          },
          "chain_hash": {
            "type": "string",
            "description": "SHA-256 hash-chain value of this receipt."
          },
          "receipt": {
            "type": "object",
            "required": [
              "url",
              "fetched_at",
              "status_code",
              "content_type",
              "byte_length",
              "sha256",
              "redirect_chain",
              "text_preview"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Final URL that was fetched."
              },
              "fetched_at": {
                "type": "string",
                "format": "date-time",
                "description": "Server fetch timestamp (UTC)."
              },
              "status_code": {
                "type": "integer",
                "description": "HTTP status returned by the target."
              },
              "content_type": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Response Content-Type, if provided."
              },
              "byte_length": {
                "type": "integer",
                "description": "Bytes read from the response body."
              },
              "sha256": {
                "type": "string",
                "description": "SHA-256 of the response body bytes."
              },
              "redirect_chain": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uri"
                },
                "description": "Ordered URLs of any redirects followed (max 3)."
              },
              "text_preview": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "First 4,000 characters of decoded text, when the body is textual."
              }
            }
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/change-check",
      "type": "http",
      "method": "POST",
      "description": "Kairostamp change check: server-side fetch of one public http/https URL, compared against a baseline the caller already holds. Requires a prior SHA-256 (prior_sha256) or a prior Kairostamp receipt id (prior_receipt_id); to obtain a first baseline, call GET /api/v1/digest. Returns whether the response body changed, both digests, and a new time-stamped evidence receipt with its tamper-evident hash-chain entry. One call performs one check; repeat monitoring means calling again.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.05",
      "maxAmountRequired": "50000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "changed",
          "previous_sha256",
          "current_sha256",
          "receipt_id",
          "chain_hash",
          "receipt"
        ],
        "properties": {
          "changed": {
            "type": "boolean",
            "description": "True when the current body digest differs from the baseline digest."
          },
          "previous_sha256": {
            "type": [
              "string",
              "null"
            ],
            "description": "Baseline digest used for the comparison."
          },
          "current_sha256": {
            "type": "string",
            "description": "SHA-256 of the body fetched now."
          },
          "receipt_id": {
            "type": "string",
            "format": "uuid",
            "description": "Evidence receipt identifier."
          },
          "previous_chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "Hash-chain value of the previous receipt."
          },
          "chain_hash": {
            "type": "string",
            "description": "Hash-chain value of this receipt."
          },
          "receipt": {
            "type": "object",
            "required": [
              "url",
              "fetched_at",
              "status_code",
              "content_type",
              "byte_length",
              "sha256",
              "redirect_chain",
              "text_preview"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "fetched_at": {
                "type": "string",
                "format": "date-time"
              },
              "status_code": {
                "type": "integer"
              },
              "content_type": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "byte_length": {
                "type": "integer"
              },
              "sha256": {
                "type": "string"
              },
              "redirect_chain": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "text_preview": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/digest",
      "type": "http",
      "method": "GET",
      "description": "URL digest receipt: server-side fetch of one public http/https URL, returning a time-stamped receipt with the HTTP status, final URL, content type, byte length, SHA-256 of the response body, redirect chain, receipt id and tamper-evident hash-chain entry. Single GET query parameter (url). One call performs one fetch; there is no monitoring and no retry.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.01",
      "maxAmountRequired": "10000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "receipt_id",
          "chain_hash",
          "receipt"
        ],
        "properties": {
          "receipt_id": {
            "type": "string",
            "format": "uuid",
            "description": "Evidence receipt identifier."
          },
          "previous_chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "SHA-256 hash-chain value of the previous receipt."
          },
          "chain_hash": {
            "type": "string",
            "description": "SHA-256 hash-chain value of this receipt."
          },
          "receipt": {
            "type": "object",
            "required": [
              "url",
              "fetched_at",
              "status_code",
              "content_type",
              "byte_length",
              "sha256",
              "redirect_chain"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Final URL that was fetched."
              },
              "fetched_at": {
                "type": "string",
                "format": "date-time"
              },
              "status_code": {
                "type": "integer"
              },
              "content_type": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "byte_length": {
                "type": "integer"
              },
              "sha256": {
                "type": "string",
                "description": "SHA-256 of the response body bytes."
              },
              "redirect_chain": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "text_preview": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/headers",
      "type": "http",
      "method": "GET",
      "description": "URL HTTP metadata receipt: server-side fetch of one public http/https URL, returning only transport metadata — HTTP status, final URL, redirect chain, content type and byte length — plus a receipt id. The response body is not returned and no content preview is stored. Single GET query parameter (url).",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.005",
      "maxAmountRequired": "5000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "receipt_id",
          "http"
        ],
        "properties": {
          "receipt_id": {
            "type": "string",
            "format": "uuid"
          },
          "http": {
            "type": "object",
            "required": [
              "url",
              "fetched_at",
              "status_code",
              "content_type",
              "byte_length",
              "redirect_chain"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Final URL after any redirects."
              },
              "fetched_at": {
                "type": "string",
                "format": "date-time"
              },
              "status_code": {
                "type": "integer"
              },
              "content_type": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "byte_length": {
                "type": "integer",
                "description": "Bytes read from the response body."
              },
              "redirect_chain": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "note": {
            "type": "string"
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/verify",
      "type": "http",
      "method": "GET",
      "description": "Receipt verification: read-only hash-chain verification of one existing Kairostamp receipt id. Recomputes the canonical SHA-256 digest, compares it with the stored chain hash, checks linkage to the preceding entry and reports whether the entry is covered by an on-chain checkpoint. Performs no outbound fetch. Single GET query parameter (receipt_id).",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.005",
      "maxAmountRequired": "5000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "receipt_id",
          "exists",
          "verdict",
          "chain"
        ],
        "properties": {
          "receipt_id": {
            "type": "string",
            "format": "uuid"
          },
          "exists": {
            "type": "boolean"
          },
          "verdict": {
            "type": "string",
            "enum": [
              "valid",
              "invalid",
              "indeterminate",
              "quarantined_legacy"
            ],
            "description": "Result of recomputing the canonical digest for this entry."
          },
          "method": {
            "type": "string",
            "description": "Verification method used."
          },
          "chain": {
            "type": "object",
            "required": [
              "chain_seq",
              "chain_hash",
              "previous_chain_hash",
              "linked"
            ],
            "properties": {
              "chain_seq": {
                "type": "integer"
              },
              "chain_hash": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous_chain_hash": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "linked": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "True when the stored previous hash matches the preceding entry."
              }
            }
          },
          "anchor": {
            "type": "object",
            "required": [
              "covered"
            ],
            "properties": {
              "covered": {
                "type": "boolean",
                "description": "True when a checkpoint covers this entry."
              },
              "status": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "chain_seq": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "network": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "note": {
                "type": "string"
              }
            }
          },
          "codes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/robots-check",
      "type": "http",
      "method": "GET",
      "description": "robots.txt check: fetches the origin's /robots.txt server-side and reports whether a given URL path is allowed or blocked for a user agent, with the matched rule, the robots URL, the HTTP status, a timestamp and a tamper-evident receipt. Query parameters: url (required), user_agent (optional, defaults to *). Only robots.txt is fetched; no crawling. Pair with GET /api/v1/link-map or /api/v1/sitemap to plan an allowed fetch.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.005",
      "maxAmountRequired": "5000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "target_url",
          "decision",
          "robots_url"
        ],
        "properties": {
          "receipt_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tamper-evident hash-chain value."
          },
          "fetched_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "note": {
            "type": "string"
          },
          "target_url": {
            "type": "string",
            "format": "uri"
          },
          "user_agent": {
            "type": "string"
          },
          "robots_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "robots_status": {
            "type": [
              "integer",
              "null"
            ]
          },
          "decision": {
            "type": "string",
            "enum": [
              "allowed",
              "blocked",
              "unknown"
            ]
          },
          "matched_rule": {
            "type": [
              "string",
              "null"
            ]
          },
          "matched_user_agent": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/redirect-audit",
      "type": "http",
      "method": "GET",
      "description": "Redirect audit: follows one public http/https URL server-side and returns the ordered redirect chain, hop count, final URL, final HTTP status, whether the destination changed origin and whether HTTPS was downgraded to HTTP, with a timestamp and a tamper-evident receipt. Single GET query parameter (url). No response body is returned.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.01",
      "maxAmountRequired": "10000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "initial_url",
          "final_url",
          "redirect_chain",
          "hop_count",
          "final_status"
        ],
        "properties": {
          "receipt_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tamper-evident hash-chain value."
          },
          "fetched_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "note": {
            "type": "string"
          },
          "initial_url": {
            "type": "string",
            "format": "uri"
          },
          "final_url": {
            "type": "string",
            "format": "uri"
          },
          "redirect_chain": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "hop_count": {
            "type": "integer"
          },
          "final_status": {
            "type": "integer"
          },
          "cross_origin": {
            "type": "boolean"
          },
          "https_downgrade": {
            "type": "boolean"
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/text-extract",
      "type": "http",
      "method": "GET",
      "description": "Readable text extraction: fetches one public HTML page server-side and returns clean plain text with the page title, final URL, HTTP status, content type, SHA-256 of the response body, a timestamp and a tamper-evident receipt. Single GET query parameter (url). Text is capped at 12000 characters; no JavaScript is executed.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.02",
      "maxAmountRequired": "20000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "url",
          "text",
          "char_count",
          "truncated"
        ],
        "properties": {
          "receipt_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tamper-evident hash-chain value."
          },
          "fetched_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "note": {
            "type": "string"
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "status_code": {
            "type": [
              "integer",
              "null"
            ]
          },
          "content_type": {
            "type": [
              "string",
              "null"
            ]
          },
          "sha256": {
            "type": [
              "string",
              "null"
            ],
            "description": "SHA-256 of the response body bytes."
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "text": {
            "type": "string"
          },
          "char_count": {
            "type": "integer"
          },
          "max_chars": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/link-map",
      "type": "http",
      "method": "GET",
      "description": "Link map: fetches one public HTML page server-side and returns up to 100 normalized, deduplicated http/https links with internal/external classification and counts, the final URL, a timestamp and a tamper-evident receipt. Single GET query parameter (url). One page only; no recursive crawling. Check crawl permission first with GET /api/v1/robots-check.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.015",
      "maxAmountRequired": "15000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "url",
          "links",
          "link_count"
        ],
        "properties": {
          "receipt_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tamper-evident hash-chain value."
          },
          "fetched_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "note": {
            "type": "string"
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "status_code": {
            "type": [
              "integer",
              "null"
            ]
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "url",
                "internal"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "internal": {
                  "type": "boolean",
                  "description": "True when the host matches the page host."
                }
              }
            }
          },
          "link_count": {
            "type": "integer"
          },
          "internal_count": {
            "type": "integer"
          },
          "external_count": {
            "type": "integer"
          },
          "max_links": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          }
        }
      }
    },
    {
      "resource": "https://kairostamp.com/api/v1/sitemap",
      "type": "http",
      "method": "GET",
      "description": "Sitemap lookup: locates a site's sitemap from robots.txt or same-origin /sitemap.xml, fetches it server-side and returns up to 100 normalized http/https URLs with the sitemap URL, document kind, count, truncation flag, a timestamp and a tamper-evident receipt. Single GET query parameter (url). One document only; child sitemaps are not fetched.",
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "price": "$0.01",
      "maxAmountRequired": "10000",
      "mimeType": "application/json",
      "outputSchema": {
        "type": "object",
        "required": [
          "site_url",
          "sitemap_url",
          "urls",
          "url_count"
        ],
        "properties": {
          "receipt_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "chain_hash": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tamper-evident hash-chain value."
          },
          "fetched_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "note": {
            "type": "string"
          },
          "site_url": {
            "type": "string",
            "format": "uri"
          },
          "sitemap_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "sitemap_status": {
            "type": [
              "integer",
              "null"
            ]
          },
          "sitemap_kind": {
            "type": "string",
            "enum": [
              "urlset",
              "sitemapindex",
              "unknown"
            ]
          },
          "urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "url_count": {
            "type": "integer"
          },
          "max_urls": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          }
        }
      }
    }
  ],
  "note": "Terms are authoritative in the 402 response of each resource. This document is a convenience index."
}