{
  "openapi": "3.1.0",
  "info": {
    "title": "SaltCrate Oracle",
    "version": "1.0.0",
    "description": "Pay-per-call web intelligence MCP: fetch pages, check links, detect changes, verify claims, extract structured data, search the web, and monitor pages over time. Keyless free tier: 200 calls/hour per IP, no signup. Beyond that: $0.01/call via USDC (Tempo); $0.50 card offered only on extract and monitor.",
    "x-guidance": "Pay-per-call web intelligence: use /fetch to retrieve and parse a live web page, /check-link to validate a URL, /check-change to detect content changes, /verify to fact-check a claim against live sources, /extract to pull structured data from a page using a JSON Schema, /search to run a live web search, and /monitor to watch a URL for changes over time. Each tool is free for the first 200 calls/hour per IP with no key at all; past that, a call costs $0.01 USDC on Tempo and a $0.50 card option is offered on /extract and /monitor only — no API key or subscription required. Every route is also available as an MCP tool on POST /mcp. An unpaid REST call returns 402 with a WWW-Authenticate: Payment challenge; retry with the resulting Authorization: Payment credential. Keyless callers may request the free tier on these REST routes by sending the header X-Oracle-Free: 1.",
    "contact": {
      "email": "saltcrate@gmail.com"
    }
  },
  "paths": {
    "/fetch": {
      "post": {
        "operationId": "fetch",
        "summary": "Fetch and parse a live web page",
        "tags": [
          "Web"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "URL to fetch and parse"
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Parsed page content (clean text + metadata)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/check_link": {
      "post": {
        "operationId": "check_link",
        "summary": "Check whether a URL is live",
        "tags": [
          "Web"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "URL to check"
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "HTTP status, redirect chain, final URL, latency",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/check_change": {
      "post": {
        "operationId": "check_change",
        "summary": "Detect whether a page changed since last check",
        "tags": [
          "Web"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "URL to monitor for changes"
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "new / changed / unchanged",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/verify": {
      "post": {
        "operationId": "verify",
        "summary": "Check whether a source URL supports a claim",
        "tags": [
          "Web"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "claim": {
                    "type": "string",
                    "description": "The claim to verify"
                  },
                  "source_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Source URL to check the claim against"
                  }
                },
                "required": [
                  "claim",
                  "source_url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confidence score + best supporting excerpt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/extract": {
      "post": {
        "operationId": "extract",
        "summary": "Extract structured data from a web page using a JSON Schema",
        "tags": [
          "Web"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "URL to extract structured data from"
                  },
                  "schema": {
                    "type": "string",
                    "description": "JSON Schema (as a JSON string) that the page content is mapped into"
                  }
                },
                "required": [
                  "url",
                  "schema"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Schema-conforming JSON extracted from the page",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/search": {
      "post": {
        "operationId": "search",
        "summary": "Search the web for a query",
        "tags": [
          "Web"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "Search query"
                  }
                },
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of {title, url, snippet} results + backend used",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/monitor": {
      "post": {
        "operationId": "monitor",
        "summary": "Watch a URL for changes over time",
        "tags": [
          "Web"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "URL to watch for changes"
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "new / changed / unchanged + change timestamps",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    }
  }
}