mirrored listing x402 eip155:8453eip155:137solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp

Redirect tier (deterministic, no LLM): verifies where a public URL actually leads: final U

Redirect tier (deterministic, no LLM): verifies where a public URL actually leads: final URL (byte-exact), first response status, and hop count of the HTTP chain, walked twice with per-hop SSRF checks. Use it to confirm a link or a moved page points where it claims. Loops and unstable chains return unverifiable, never a guess. First 100 checks per client are free: resend with header X-Use-Free-Allowance: yes and no payment to use them.

Do you run scrapecheck.fly.dev? This listing was mirrored from Coinbase's public Bazaar. Claim it in 30 seconds — no account required — and it becomes verified, permanently overriding the mirrored copy.

Claim this listing
2000 (raw units)
price
2
calls / 30d
2
unique payers
2026-08-30
updated

Provider

scrapecheck.fly.dev · discovered, not yet claimed by its owner

Payment (x402 accepts[])

[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "payTo": "0x455F20eC147477CAFcd6D77C1604529f3c4Ff665",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "2000",
    "maxTimeoutSeconds": 300
  },
  {
    "scheme": "exact",
    "network": "eip155:137",
    "payTo": "0x455F20eC147477CAFcd6D77C1604529f3c4Ff665",
    "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
    "amount": "2000",
    "maxTimeoutSeconds": 300
  },
  {
    "scheme": "exact",
    "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
    "payTo": "4HuSbgqgKkeUM5jEzAzLGpxtivCGda9eEtYc2Sp1fLpM",
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "amount": "2000",
    "maxTimeoutSeconds": 300
  }
]

Output schema

{
  "bazaar": {
    "info": {
      "input": {
        "body": {
          "claim": {
            "final_url": "https://scrapecheck.fly.dev/price-mismatch-checker",
            "first_status": 301,
            "hops": 1
          },
          "url": "https://scrapecheck.fly.dev/audit"
        },
        "bodyType": "json",
        "method": "POST",
        "type": "http"
      },
      "output": {
        "example": {
          "check_type": "redirect_chain_v1",
          "confidence": 0.95,
          "engine": "web_field_v1/0.2.0+2ae28205cac4",
          "evidence": {
            "lens_votes": {},
            "refetch_excerpt": "301 https://scrapecheck.fly.dev/audit -> 200 https://scrapecheck.fly.dev/price-mismatch-checker",
            "refetched_at": "2026-08-28T00:00:00.000Z",
            "second_fetch_at": "2026-08-28T00:00:01.000Z"
          },
          "key_id": "k2",
          "reasons": [
            "the chain settles at the claimed final URL (byte-exact)",
            "first response status is 301 as claimed",
            "the chain has 1 redirect hop(s) as claimed"
          ],
          "signature": "ed25519:…",
          "source_hash": "sha256:…",
          "verdict": "pass",
          "verdict_id": "00000000-0000-0000-0000-000000000000",
          "verifier_url": "https://scrapecheck.fly.dev"
        },
        "type": "json"
      }
    },
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "input": {
          "additionalProperties": false,
          "properties": {
            "body": {
              "properties": {
                "claim": {
                  "description": "see the route description; there is no asked field - this tier adjudicates exactly what it accepts",
                  "type": "object"
                },
                "url": {
                  "description": "public HTTPS URL",
                  "type": "string"
                }
              },
              "required": [
                "url",
                "claim"
              ]
            },
            "bodyType": {
              "enum": [
                "json",
                "form-data",
                "text"
              ],
              "type": "string"
            },
            "method": {
              "enum": [
                "POST"
              ],
              "type": "string"
            },
            "type": {
              "const": "http",
              "type": "string"
            }
          },
          "required": [
            "type",
            "method",
            "bodyType",
            "body"
          ],
          "type": "object"
        },
        "output": {
          "properties": {
            "example": {
              "properties": {
                "check_type": {
                  "description": "The check contract used, e.g. web_field_v1.",
                  "type": "string"
                },
                "confidence": {
                  "description": "The engine's confidence in the verdict, 0 to 1.",
                  "type": "number"
                },
                "engine": {
                  "description": "Engine name and version digest that produced the verdict.",
                  "type": "string"
                },
                "evidence": {
                  "description": "What the re-fetch observed.",
                  "properties": {
                    "lens_votes": {
                      "description": "Boolean votes is_real, is_current, does_answer from the judging lenses.",
                      "properties": {
                        "does_answer": {
                          "type": "boolean"
                        },
                        "is_current": {
                          "type": "boolean"
                        },
                        "is_real": {
                          "type": "boolean"
                        }
                      },
                      "type": "object"
                    },
                    "refetch_excerpt": {
                      "description": "Excerpt of the re-fetched page content the verdict was judged against.",
                      "type": "string"
                    },
                    "refetched_at": {
                      "description": "UTC timestamp of the engine's own fetch of the page.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "key_id": {
                  "description": "Identifier of the signing key; resolve against GET /pubkey.",
                  "type": "string"
                },
                "reasons": {
                  "description": "The stated reasons for the verdict.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "signature": {
                  "description": "ed25519 signature over canonical sorted-key JSON of every field except signature.",
                  "type": "string"
                },
                "source_hash": {
                  "description": "sha256 of the normalized page text the verdict judged; null when no anchor text was obtained.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "verdict": {
                  "description": "One of pass, fail, unverifiable.",
                  "enum": [
                    "pass",
                    "fail",
                    "unverifiable"
                  ],
                  "type": "string"
                },
                "verdict_id": {
                  "description": "Unique identifier for this verdict; its issuance is confirmable at GET /verdicts/{verdict_id}.",
                  "type": "string"
                },
                "verifier_url": {
                  "description": "The issuing service's URL; display only, never a trust root.",
                  "type": "string"
                }
              },
              "required": [
                "verdict_id",
                "verdict",
                "confidence",
                "reasons",
                "evidence",
                "check_type",
                "engine",
                "key_id",
                "verifier_url",
                "source_hash",
                "signature"
              ],
              "type": "object"
            },
            "type": {
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        }
      },
      "required": [
        "input"
      ],
      "type": "object"
    }
  },
  "errorNote": "A page that cannot be verified is NOT an error: unverifiable (or fail on /verify-presence) is a signed 200 verdict. 4xx means the request never reached the engine.",
  "errors": [
    {
      "body": {},
      "name": "Payment Required",
      "note": "the x402 v2 challenge is not in the body; it is base64-encoded JSON in the PAYMENT-REQUIRED response header",
      "status": 402,
      "when": "any request without valid payment, a free-allowance header, or a service key — including requests with malformed bodies: payment is checked before input validation"
    },
    {
      "body": {
        "details": [
          "url: Invalid url",
          "claim: Required",
          "asked: Required"
        ],
        "error": "invalid input contract"
      },
      "name": "Bad Request",
      "note": "details lists one entry per failing field, in the form \"<field>: <problem>\"",
      "status": 400,
      "when": "payment or allowance has cleared but the body does not match the input contract"
    },
    {
      "body": {
        "error": "rate limit exceeded — try again shortly"
      },
      "name": "Too Many Requests",
      "status": 429,
      "when": "requests exceed the per-minute rate limit, paid or not"
    }
  ]
}

Use it

curl

curl "https://scrapecheck.fly.dev/verify-redirect"
# -> 402 Payment Required, accepts[] lists how to pay
# retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid

JavaScript

const res = await fetch("https://scrapecheck.fly.dev/verify-redirect");
if (res.status === 402) {
  const { accepts } = await res.json();
  // pay one of accepts[] via an x402 client, then retry with the payment header
}

Python

import httpx
res = httpx.get("https://scrapecheck.fly.dev/verify-redirect")
if res.status_code == 402:
    accepts = res.json()["accepts"]
    # pay one of accepts[] via an x402 client, then retry with the payment header

Machine-readable

Everything on this page is also available as clean JSON at /resources/6286.json, and this resource appears in /discovery/resources and /discovery/search.