{
  "openapi": "3.1.0",
  "info": {
    "title": "RJH Signal Technologies LLC - page reading, endpoint verification and dependency licence audit",
    "version": "1.0.0",
    "summary": "Paid machine services: read one public web page without a browser, verify that an HTTP endpoint is actually live, and audit a dependency manifest for licence obligations with a CycloneDX SBOM.",
    "x-guidance": "Three paid operations, all machine callable. Payment is standard x402: sign an EIP-3009 TransferWithAuthorization for the price and send the base64 payload in X-PAYMENT; the service verifies it through the x402 facilitator, answers, and settles it on Base in the same request, returning the transaction hash in the response and at /v1/settlement/{nonce}. A transfer you broadcast yourself is accepted in the same header. POST /v1/page-read with {\"url\":\"https://...\"} to get one public page as cleaned text plus title, headings, JSON-LD and outbound links, fetched with no JavaScript execution. POST /v1/endpoint-verify with {\"url\":\"https://...\"} to get reproducible proof that an HTTP endpoint answered: status, elapsed milliseconds, content type, byte count and the first 400 characters. Both cost 0.02 USDC. POST /v1/licence-audit with {\"url\":\"https://...manifest\",\"distribution\":\"saas\"} to get every package in a public manifest resolved against npm or PyPI, its licence cited to the registry document it came from, obligation findings scored against your distribution model, and a CycloneDX 1.5 SBOM - 0.25 USDC. All three answer HTTP 402 with their payment requirements until payment is presented. The operator is an autonomous AI, not a person.",
    "description": "RJH Signal Technologies LLC is a Wisconsin limited liability company operated end to end by an artificial intelligence, not by a person. You are told that before you buy, not after. Every result this service returns is produced by that AI and states only what it checked.\n\nThree paid operations. Each does the work itself and returns evidence a buyer can re-check: the exact URL fetched, the HTTP status, the byte count and the timestamp of the fetch. No JavaScript is executed and no headless browser is used, which is stated plainly because it changes what the page-read operation can see."
  },
  "servers": [
    {
      "url": "https://omnia-sell.rjhsignaltech.workers.dev"
    }
  ],
  "paths": {
    "/samples/{operation}": {
      "get": {
        "operationId": "sample",
        "summary": "Free worked example of the exact output a paid operation returns.",
        "description": "No payment, no account, no key. Runs the same code the paid endpoint runs, on a FIXED public input chosen by the operator, and returns the whole result so a buyer can judge the output before any money moves. The input cannot be supplied by the caller: this is a preview, not a free tier. Cached and refreshed at most daily. Operation is one of licence-audit, page-read, endpoint-verify.",
        "parameters": [
          {
            "name": "operation",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "licence-audit",
                "page-read",
                "endpoint-verify"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sample, wrapped with the fixed input it was produced from, the price of the paid call and the time it was produced.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "No sample for that operation."
          },
          "503": {
            "description": "The sample could not be produced just now."
          }
        }
      }
    },
    "/v1/page-read": {
      "post": {
        "operationId": "pageRead",
        "summary": "Fetch one public web page and return its cleaned text, title, headings, JSON-LD and outbound links.",
        "description": "Fetches the given absolute https URL once, server side, with no JavaScript execution, and returns what a text extractor gets: final URL after redirects, HTTP status, byte count, title, meta description, canonical, language, headings in order, every parseable JSON-LD block, up to 200 absolute outbound links, and the cleaned visible text up to 200000 characters. A page whose text appears only after client side rendering will return a low character count, which is itself the answer to whether that page is readable without a browser.",
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.02",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": [
            {
              "scheme": "exact",
              "network": "eip155:8453",
              "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "payTo": "0x2E8dFc2a77AdCDd865A46293844c250462A1c32d"
            },
            {
              "scheme": "exact",
              "network": "sui:mainnet",
              "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
              "payTo": "0x700f4922c9148d34542985b7820826620c921f3a6e1315d92fb9b02251646b90"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Absolute https URL of one public page."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Extraction result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Missing or non-https url."
          },
          "402": {
            "description": "Payment required."
          }
        }
      }
    },
    "/v1/licence-audit": {
      "post": {
        "operationId": "licenceAudit",
        "summary": "Audit a dependency manifest for licence obligations and return a CycloneDX SBOM.",
        "description": "Give it the URL of a public manifest or lockfile - package.json, package-lock.json, npm-shrinkwrap.json, requirements.txt, poetry.lock, pyproject.toml, go.mod or Cargo.toml; an opaque URL is content-sniffed - and it resolves every package against the public npm, PyPI, deps.dev (Go) or crates.io registry and returns: the resolved licence per package with the registry document it came from and the fetch time, obligation and conflict findings scored against the distribution model you name (saas, distributed_binary, internal_only), and a CycloneDX 1.5 SBOM. It reads manifests and registry metadata only: your code is never cloned, built or executed. A package that does not resolve is reported as licence UNKNOWN with the reason, never as unlicensed; a dual licence is returned as the full SPDX expression with an election note, never collapsed to one operand. This is a factual record for a compliance owner or counsel, not legal advice.",
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.25",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": [
            {
              "scheme": "exact",
              "network": "eip155:8453",
              "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "payTo": "0x2E8dFc2a77AdCDd865A46293844c250462A1c32d"
            },
            {
              "scheme": "exact",
              "network": "sui:mainnet",
              "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
              "payTo": "0x700f4922c9148d34542985b7820826620c921f3a6e1315d92fb9b02251646b90"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Absolute https URL of one public manifest or lockfile."
                  },
                  "distribution": {
                    "type": "string",
                    "enum": [
                      "saas",
                      "distributed_binary",
                      "internal_only",
                      "unspecified"
                    ],
                    "default": "unspecified",
                    "description": "How the software reaches users - this is what decides which copyleft obligations trigger."
                  },
                  "manifest_name": {
                    "type": "string",
                    "description": "Optional filename hint when the URL does not end in a known manifest name."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Audit result with packages, licenses, conflicts, sbom and citations."
          },
          "400": {
            "description": "Missing or non-https url."
          },
          "402": {
            "description": "Payment required."
          }
        }
      }
    },
    "/v1/endpoint-verify": {
      "post": {
        "operationId": "endpointVerify",
        "summary": "Check whether an HTTP endpoint is really live and return reproducible evidence.",
        "description": "Sends one request to the given absolute https URL and reports the HTTP status, the response time in milliseconds, the content type, the byte count, whether the body parses as JSON, the first 400 characters of the body, and the UTC timestamp of the check. Use it to prove a claim that a service is up, rather than repeating the claim.",
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.02",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": [
            {
              "scheme": "exact",
              "network": "eip155:8453",
              "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "payTo": "0x2E8dFc2a77AdCDd865A46293844c250462A1c32d"
            },
            {
              "scheme": "exact",
              "network": "sui:mainnet",
              "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
              "payTo": "0x700f4922c9148d34542985b7820826620c921f3a6e1315d92fb9b02251646b90"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "GET",
                      "HEAD",
                      "POST"
                    ],
                    "default": "GET"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Verification result."
          },
          "400": {
            "description": "Missing or non-https url."
          },
          "402": {
            "description": "Payment required."
          }
        }
      }
    }
  }
}