← 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).
- 0x8140e87470d98650102cd405354b13ce3ae903c3c0c2b325c58cc53f0be767e1
- 0x8a8415bd0ad36b23bd22749d038cd28b52b0bda72709a45e0c3a47b9955040f8
- 0x4f24013db6f54fb5003680f09d0ee728a9093815f5fad9330b58a0d76dbfbe4c
- 0x1ed7f213d2c04ed025caeb27ceebc4bdcafdcdc002f8518b8aa4fa31dc974234
- 0x540cd5828e885d421421ff3eab108dc08f899765ad445713765fb470094b7008
- 0xa9289feb28a328be5a728f1c7fdf72fb4891638694bbab519d08fb7936a0f230
- 0x15e0bab7d3f6956424cd4f8127c9d72dce3d65c9559c5b5d69e2575a4ef0a93b
- 0x3967bd02f73361cd183d78e41217ca5641bee7020bd10d9082d8a3004797c970
- 0x947bf51fe747d6f31e2541b7a83a5299be25717c13b588d8ef64a531b5470529
- 0xa6bf3e233d964bf47c35e307fb1e82a9db46b720ed0d1a887fab65896dbfda9a
- 0xb998e012b473bde18346485cd0b7b8b31ab48d5f22ba9bc660bb2e523161e255
- 0x08155d70132f82e370214fc5b72194dfa6f5e57670b7bcf74776e8418302897e
- 0x4d2ee986a690e903126f449b4e9e62d5572b350357ab4496a83488949b131c29
- 0x0eff463856b0992d53ab7d8c0b97c71541413358bdd445710c1e4b6aeb4d8f78
- 0x7eb603d37f0f22dae1ea013e391889906ffc0139ff26e25b044bee38eec8f9b2
- 0x2b6e23e3624a1b66e1d2298cfbce99a93ce6b13d24a58112a71802d79c5f7a76
- 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
- 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
- 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae