addrbookFor publishers
← The evidence ledger

Evidence row 33465

Observed , by sync.x402_bazaar/1.

Kind
listing
About
source_record x402_bazaar:https://app.difficat.com/api/v1/jobs
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
9ee0c2bc497db8d58ab8830e8cccbc468dcee04ddc653db93e5045342c3637a7
Leaf
0x8140faba8213fa74e5689830a49729e4b052bbe1e7db551c136ae7c64469914b

What was observed

{
  "endpoints": [
    [
      "x402",
      "https://app.difficat.com/api/v1/jobs"
    ]
  ],
  "name": "DiffiCat",
  "owner_address": "0x91805ccdcb0af529ffa510efc494786f19d4c257",
  "raw": {
    "accepts": [
      {
        "amount": "100000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "extra": {
          "assetTransferMethod": "eip3009",
          "name": "USD Coin",
          "version": "2"
        },
        "maxTimeoutSeconds": 300,
        "network": "eip155:8453",
        "payTo": "0x91805ccDcB0aF529FFa510Efc494786f19d4c257",
        "scheme": "exact"
      }
    ],
    "description": "Starts a website migration comparison: checks page existence, content and visual regression between a source site and its migrated copy, then produces a report with screenshots. Use it to verify a migration or redesign before go-live. Priced on the pages it compares (the urls list, or the pages discovery finds, at most the optional maxPages ceiling), no page limit: 0.02 USD per page for the first 1000, 0.01 USD beyond, charged upfront.",
    "extensions": {
      "bazaar": {
        "info": {
          "input": {
            "body": {
              "sourceUrl": "https://difficat.com",
              "targetUrl": "https://www.difficat.com"
            },
            "bodyType": "json",
            "method": "POST",
            "type": "http"
          },
          "output": {
            "example": {
              "jobId": "web-1a2b3c",
              "jobToken": "shown-once",
              "links": {
                "cancel": "/api/v1/jobs/web-1a2b3c/cancel",
                "report": "/api/v1/jobs/web-1a2b3c/report",
                "self": "/api/v1/jobs/web-1a2b3c"
              },
              "pagesCharged": 5,
              "payment": {
                "amount": "0.10",
                "currency": "USD"
              },
              "status": "running"
            },
            "type": "json"
          }
        },
        "schema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "properties": {
            "input": {
              "additionalProperties": false,
              "properties": {
                "body": {
                  "anyOf": [
                    {
                      "required": [
                        "sourceUrl"
                      ]
                    },
                    {
                      "required": [
                        "urls"
                      ]
                    }
                  ],
                  "properties": {
                    "callbackUrl": {
                      "description": "Optional https URL (port 443) that receives one JSON POST when the job ends (jobId, status, summary, links; never the jobToken), a nudge to read the job. Public hosts only, no redirects followed, retried twice; delivery never affects the job.",
                      "format": "uri",
                      "maxLength": 2048,
                      "type": "string"
                    },
                    "checkMode": {
                      "description": "What each page is checked on: full (existence, content and visual, the default), text-only (existence and content, no screenshots) or existence-only (only that every page exists and answers, as for a site translated into another language; content and visual are reported as skipped with reason not-requested).",
                      "enum": [
                        "full",
                        "text-only",
                        "existence-only"
                      ],
                      "type": "string"
                    },
                    "dryRun": {
                      "description": "Quote only: runs every check and the pricing, then answers the page count and exact amount. Nothing is charged, the free allowance is not used and no job starts; the same body without dryRun is priced from the retained result.",
                      "type": "boolean"
                    },
                    "maxPages": {
                      "description": "Optional ceiling on the pages compared and charged for. The job is priced on the pages it compares: the urls list, or the pages discovery finds, at most this many. There is no page limit. maxPages: 1 without sitemapUrl compares exactly the given sourceUrl and targetUrl, with no discovery.",
                      "minimum": 1,
                      "type": "integer"
                    },
                    "maxPriceUsd": {
                      "description": "Optional spend cap in USD. A job priced above it is refused before any challenge, so an auto-paying client is never asked for more.",
                      "exclusiveMinimum": 0,
                      "type": "number"
                    },
                    "sitemapUrl": {
                      "format": "uri",
                      "maxLength": 2048,
                      "type": "string"
                    },
                    "sourceAuth": {
                      "properties": {
                        "password": {
                          "description": "Password for HTTP basic auth.",
                          "type": "string"
                        },
                        "username": {
                          "description": "Username for HTTP basic auth.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "username",
                        "password"
                      ],
                      "type": "object"
                    },
                    "sourceUrl": {
                      "description": "Site A, the reference site (full URL). Required unless urls is given.",
                      "format": "uri",
                      "maxLength": 2048,
                      "type": "string"
                    },
                    "targetAuth": {
                      "properties": {
                        "password": {
                          "description": "Password for HTTP basic auth.",
                          "type": "string"
                        },
                        "username": {
                          "description": "Username for HTTP basic auth.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "username",
                        "password"
                      ],
                      "type": "object"
                    },
                    "targetUrl": {
                      "format": "uri",
                      "maxLength": 2048,
                      "type": "string"
                    },
                    "threshold": {
                      "description": "Visual diff tolerance as a fraction from 0 (exact) to 1: 0.05 means 5%. The web app takes a percentage; the API does not.",
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "urls": {
                      "description": "Explicit page pairs to compare (at most 50000); skips discovery and is priced per pair. One pair is a single-page comparison and needs no sourceUrl.",
                      "items": {
                        "properties": {
                          "source": {
                            "description": "Page URL on Site A.",
                            "format": "uri",
                            "maxLength": 2048,
                            "type": "string"
                          },
                          "target": {
                            "description": "The same page's URL on Site B.",
                            "format": "uri",
                            "maxLength": 2048,
                            "type": "string"
                          }
                        },
                        "required": [
                          "source",
                          "target"
                        ],
                        "type": "object"
                      },
                      "maxItems": 50000,
                      "minItems": 1,
                      "type": "array"
                    },
                    "viewportWidth": {
                      "maximum": 2560,
                      "minimum": 320,
                      "type": "integer"
                    }
                  },
                  "type": "object"
                },
                "bodyType": {
                  "enum": [
                    "json"
                  ],
                  "type": "string"
                },
                "method": {
                  "enum": [
                    "POST"
                  ],
                  "type": "string"
                },
                "type": {
                  "const": "http",
                  "type": "string"
                }
              },
              "required": [
                "type",
                "method",
                "bodyType",
                "body"
              ],
              "type": "object"
            },
            "output": {
              "properties": {
                "example": {
                  "type": "object"
                },
                "type": {
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            }
          },
          "required": [
            "input"
          ],
          "type": "object"
        }
      },
      "mppx": {
        "info": {
          "_mppx_scope": "difficat:job:0.10",
          "method": "POST",
          "opaque": "eyJfbXBweF9zY29wZSI6ImRpZmZpY2F0OmpvYjowLjEwIiwiYW1vdW50IjoiMC4xMCIsImtpbmQiOiJqb2IifQ"
        },
        "schema": {
          "additionalProperties": false,
          "properties": {
            "_mppx_scope": {
              "type": "string"
            },
            "digest": {
              "type": "string"
            },
            "method": {
              "type": "string"
            },
            "nonce": {
              "type": "string"
            },
            "opaque": {
              "type": "string"
            }
          },
          "required": [
            "method"
          ],
          "type": "object"
        }
      }
    },
    "lastUpdated": "2026-10-14T20:30:58.238Z",
    "quality": {
      "l30DaysTotalCalls": 2,
      "l30DaysUniquePayers": 1,
      "lastCalledAt": "2026-10-14T20:30:57.256Z"
    },
    "resource": "https://app.difficat.com/api/v1/jobs",
    "serviceName": "DiffiCat",
    "tags": [
      "migration",
      "visual-regression",
      "testing"
    ],
    "type": "http",
    "x402Version": 2
  },
  "source": "x402_bazaar",
  "summary": "Starts a website migration comparison: checks page existence, content and visual regression between a source site and its migrated copy, then produces a report with screenshots. Use it to verify a migration or redesign before go-live. Priced on the pages it compares (the urls list, or the pages discovery finds, at most the optional maxPages ceiling), no page limit: 0.02 USD per page for the first 1000, 0.01 USD beyond, charged upfront."
}

What the leaf hashes

{"body":"9ee0c2bc497db8d58ab8830e8cccbc468dcee04ddc653db93e5045342c3637a7","id":33465,"kind":"listing","method":"sync.x402_bazaar/1","observed_us":1793025368842214,"prev":null,"subject":"x402_bazaar:https://app.difficat.com/api/v1/jobs","subject_kind":"source_record"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0x8140e87470d98650102cd405354b13ce3ae903c3c0c2b325c58cc53f0be767e1
  2. 0x8a8415bd0ad36b23bd22749d038cd28b52b0bda72709a45e0c3a47b9955040f8
  3. 0x4f24013db6f54fb5003680f09d0ee728a9093815f5fad9330b58a0d76dbfbe4c
  4. 0x1ed7f213d2c04ed025caeb27ceebc4bdcafdcdc002f8518b8aa4fa31dc974234
  5. 0x540cd5828e885d421421ff3eab108dc08f899765ad445713765fb470094b7008
  6. 0xa9289feb28a328be5a728f1c7fdf72fb4891638694bbab519d08fb7936a0f230
  7. 0x15e0bab7d3f6956424cd4f8127c9d72dce3d65c9559c5b5d69e2575a4ef0a93b
  8. 0x3967bd02f73361cd183d78e41217ca5641bee7020bd10d9082d8a3004797c970
  9. 0x947bf51fe747d6f31e2541b7a83a5299be25717c13b588d8ef64a531b5470529
  10. 0xa6bf3e233d964bf47c35e307fb1e82a9db46b720ed0d1a887fab65896dbfda9a
  11. 0xb998e012b473bde18346485cd0b7b8b31ab48d5f22ba9bc660bb2e523161e255
  12. 0x08155d70132f82e370214fc5b72194dfa6f5e57670b7bcf74776e8418302897e
  13. 0x4d2ee986a690e903126f449b4e9e62d5572b350357ab4496a83488949b131c29
  14. 0x0eff463856b0992d53ab7d8c0b97c71541413358bdd445710c1e4b6aeb4d8f78
  15. 0x7eb603d37f0f22dae1ea013e391889906ffc0139ff26e25b044bee38eec8f9b2
  16. 0x2b6e23e3624a1b66e1d2298cfbce99a93ce6b13d24a58112a71802d79c5f7a76
  17. 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON