Skip to main content
Glama

Check an x402 endpoint

check_endpoint
Read-onlyIdempotent

Get the trust verdict for one x402 endpoint: score (0-100), grade (A-F), and verdict (proceed, caution, avoid, free, or insufficient_data), plus uptime, delivery-test status, payout-wallet incidents, and how many independent buyers stand behind the seller's buyer wallets (we count customers, not wallets). Use it when you're deciding whether an endpoint is trustworthy at all, before you have a price quote. When you already have the 402 quote (amount and payTo) and are about to pay, use check_payment instead: it runs this same check and also verifies the price and wallet. To discover good endpoints rather than check a known one, use top_endpoints. Read-only and free; reflects monitoring every 30 minutes and real test payments, so a brand-new endpoint may return insufficient_data. Endpoints not in the catalog return monitored: false and are checked automatically: if one answers a valid x402 payment quote it joins the catalog within about 10 minutes (see intake). A retest field appears while a failed paid test awaits its re-test (the grade changes only if that fails too). API docs: https://github.com/Book0fEli/lumiere-paycheck/blob/main/docs/api.md

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "url": "<url>"
    },
    "name": "check_endpoint"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYesFull URL of the x402 endpoint including path, exactly as the agent will call it, e.g. https://api.example.com/v1/price.

Output Schema

NameRequiredDescriptionDefault
urlYesThe endpoint checked
authNoPresent when our paid test was refused for want of the seller's own sign-in (no money was taken). Have access? Send hasAccess: true to check_payment.
pageNoPublic page with the full history
gradeNoA delivered cleanly; B delivered with a caveat; C unconfirmed; D doesn't work as listed, no money lost; F costs money or unsafe; ? with too little data
scoreNo0-100; null for free resources
adviceNoWhat the verdict means for paying it, naming the actual cause
buyersNoWho is really behind the seller's buyers. Never changes the grade.
intakeNoFor an endpoint we don't monitor yet: it's put in line for a first check, and joins the catalog within about 10 minutes if it answers a valid x402 payment quote
pointsNoThe points behind the score: uptime /40, speed /15, stability /25, delivery /20
probesNoChecks counted in the last 7 days
retestNoPresent while our latest paid test failed and its re-test (about 2 hours later) hasn't run: the grade still shows the earlier result and changes only if the re-test fails too
valuesNoAutomatic value checks on the latest paid response. A warning caps the grade at B, never avoid.
browserNoWhether a browser-based agent can pay this endpoint (CORS on the 402 and the payment preflight). Server-side agents aren't affected. Never changes the grade.
listingNoPresent only when the latest paid response differs from the listing's example or schema. The data is delivered.
reasonsNoEvery factor behind the grade, most important first: paid tests (with date and what came back), uptime, speed, payout wallet, price, listing
verdictYesproceed | caution | avoid | free | insufficient_data
deliveryNoverified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is D/caution; taking the money and failing is F/avoid); or unverified
forTeamsNoShort note about team plans (per-agent keys, spend limits, audit trail)
headlineNoOne sentence: the verdict and its main reason
decidedByNoWhich rule set the final score (e.g. a ceiling from a failed paid test), or that it came straight from the points
lookalikeNoPresent when this new endpoint looks like an imitation of an established seller (name one character off, lookalike characters, or a copied listing) and pays a different wallet. check_payment asks for review unless allowLookalike is true.
monitoredYesfalse if the endpoint isn't in the monitored catalog
payToModeNofixed, or per_request when the seller issues a new payout address per request
uptimePctNoShare of checks in the last 7 days that returned a valid payment quote
withdrawnNoPresent when the endpoint was withdrawn by its seller or is gone from the Bazaar: no longer for sale, don't pay it.
testedWithNoPresent when the latest passing paid test needed a sign-in or extra input: a seller-provided test account, a wallet sign-in, or the seller's declared test request.
x402VersionNox402 protocol version the endpoint quotes (1 or 2)
buyerReportsNoWhat real buyers reported after paying. Never changes the grade; confirmations move the endpoint up our paid-test queue.
exampleInputNoPresent when the listing's own example input got 'not found' when we paid (no money taken): use real input.
requiredInputNoPresent when our paid test was refused for want of a header or input the listing doesn't document (no money taken).
valuesCheckedNoLatest paid check also passed known-answer value tests
walletIncidentsNoUnexplained payout-wallet changes
walletUnconfirmedNoRecent wallet changes nobody could confirm yet

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / intake
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "For an endpoint we don't monitor yet: it's put in line for a first check, and joins the catalog within about 10 minutes if it answers a valid x402 payment quote",
      +  "properties": {
      +    "note": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "queued | checking | monitored | rejected_recently | host_full | busy | invalid",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / retest
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present while our latest paid test failed and its re-test (about 2 hours later) hasn't run: the grade still shows the earlier result and changes only if the re-test fails too",
      +  "properties": {
      +    "firstFailureAt": {
      +      "type": "string"
      +    },
      +    "moneyTaken": {
      +      "type": "boolean"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "pending": {
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "retestDueBy": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "pending",
      +    "firstFailureAt",
      +    "retestDueBy",
      +    "moneyTaken",
      +    "reason",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / browser
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Whether a browser-based agent can pay this endpoint (CORS on the 402 and the payment preflight). Server-side agents aren't affected. Never changes the grade.",
      +  "properties": {
      +    "checkedAt": {
      +      "type": "string"
      +    },
      +    "problems": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "ready": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "ready",
      +    "checkedAt"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / lookalike
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when this new endpoint looks like an imitation of an established seller (name one character off, lookalike characters, or a copied listing) and pays a different wallet. check_payment asks for review unless allowLookalike is true.",
      +  "properties": {
      +    "of": {
      +      "type": "string"
      +    },
      +    "reason": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "of",
      +    "reason"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / x402Version
      Added value: +{
      +  "description": "x402 protocol version the endpoint quotes (1 or 2)",
      +  "type": "number"
      +}
  3. Changed5 schema fields changed
    • changedOutput schema / properties / advice / description
      Previous value: -"What the verdict means for paying it"New value: +"What the verdict means for paying it, naming the actual cause"
    • addedOutput schema / properties / decidedBy
      Added value: +{
      +  "description": "Which rule set the final score (e.g. a ceiling from a failed paid test), or that it came straight from the points",
      +  "type": "string"
      +}
    • addedOutput schema / properties / headline
      Added value: +{
      +  "description": "One sentence: the verdict and its main reason",
      +  "type": "string"
      +}
    • addedOutput schema / properties / points
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The points behind the score: uptime /40, speed /15, stability /25, delivery /20",
      +  "properties": {
      +    "delivery": {
      +      "type": "string"
      +    },
      +    "speed": {
      +      "type": "string"
      +    },
      +    "stability": {
      +      "type": "string"
      +    },
      +    "total": {
      +      "type": "string"
      +    },
      +    "uptime": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "uptime",
      +    "speed",
      +    "stability",
      +    "delivery",
      +    "total"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / reasons
      Added value: +{
      +  "description": "Every factor behind the grade, most important first: paid tests (with date and what came back), uptime, speed, payout wallet, price, listing",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "at": {
      +        "description": "Date of the event it's based on (YYYY-MM-DD)",
      +        "type": "string"
      +      },
      +      "effect": {
      +        "description": "positive, neutral or negative",
      +        "type": "string"
      +      },
      +      "factor": {
      +        "description": "data, delivery, uptime, speed, wallet, price, listing, values, access or withdrawn",
      +        "type": "string"
      +      },
      +      "limit": {
      +        "description": "The ceiling this factor puts on the grade, e.g. \"F (max 39)\"",
      +        "type": "string"
      +      },
      +      "text": {
      +        "description": "What we found, in plain words (paid-test results include the date and what came back)",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "factor",
      +      "effect",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / withdrawn
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when the endpoint was withdrawn by its seller or is gone from the Bazaar: no longer for sale, don't pay it.",
      +  "properties": {
      +    "at": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "reason": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "at",
      +    "reason",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  5. Changed2 schema fields changed
    • addedOutput schema / properties / requiredInput
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when our paid test was refused for want of a header or input the listing doesn't document (no money taken).",
      +  "properties": {
      +    "documented": {
      +      "type": "boolean"
      +    },
      +    "note": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "documented",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / testedWith
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when the latest passing paid test needed a sign-in or extra input: a seller-provided test account, a wallet sign-in, or the seller's declared test request.",
      +  "properties": {
      +    "how": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "how",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  6. Changed3 schema fields changed
    • changedOutput schema / properties / delivery / description
      Previous value: -"verified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is caution, not avoid); or unverified"New value: +"verified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is D/caution; taking the money and failing is F/avoid); or unverified"
    • addedOutput schema / properties / exampleInput
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when the listing's own example input got 'not found' when we paid (no money taken): use real input.",
      +  "properties": {
      +    "found": {
      +      "type": "boolean"
      +    },
      +    "note": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "found",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / grade / description
      Previous value: -"A-F, or ? with too little data"New value: +"A delivered cleanly; B delivered with a caveat; C unconfirmed; D doesn't work as listed, no money lost; F costs money or unsafe; ? with too little data"
  7. Changed1 schema field changed
    • addedOutput schema / properties / auth
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when our paid test was refused for want of the seller's own sign-in (no money was taken). Have access? Send hasAccess: true to check_payment.",
      +  "properties": {
      +    "note": {
      +      "type": "string"
      +    },
      +    "required": {
      +      "description": "true: the seller needs its own sign-in (account, API key or wallet signature) on top of x402",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "required",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  8. Changed3 schema fields changed
    • addedOutput schema / properties / buyerReports
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "What real buyers reported after paying. Never changes the grade; confirmations move the endpoint up our paid-test queue.",
      +  "properties": {
      +    "confirmed": {
      +      "description": "Buyers (customers or wallets) who reported a usable response in 7 days",
      +      "type": "number"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "ourTestQueued": {
      +      "description": "Our own paid test is queued for this endpoint",
      +      "type": "boolean"
      +    },
      +    "problems": {
      +      "description": "Buyers who reported a problem in 7 days",
      +      "type": "number"
      +    },
      +    "windowDays": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "confirmed",
      +    "problems",
      +    "ourTestQueued",
      +    "windowDays",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / delivery / description
      Previous value: -"verified = a real test payment was delivered; failing; or unverified"New value: +"verified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is caution, not avoid); or unverified"
    • addedOutput schema / properties / values
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Automatic value checks on the latest paid response. A warning caps the grade at B, never avoid.",
      +  "properties": {
      +    "checked": {
      +      "description": "true: automatic value checks passed on the latest paid test",
      +      "type": "boolean"
      +    },
      +    "warning": {
      +      "description": "A value that looks wrong (wrong subject, stale data, price far from the public spot price)",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "checked"
      +  ],
      +  "type": "object"
      +}
  9. Changed3 schema fields changed
    • changedOutput schema / properties / listing / description
      Previous value: -"Present only when the latest paid response doesn't match the listing's example. The data is delivered; the grade is capped at B until the listing matches."New value: +"Present only when the latest paid response differs from the listing's example or schema. The data is delivered."
    • addedOutput schema / properties / listing / properties / capped
      Added value: +{
      +  "description": "true: the data is reshaped vs the listing (nested, list vs item), grade capped at B; false: a minor gap, warning only",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / listing / properties / sellerFix / description
      Previous value: -"What the seller changes to lift the B cap"New value: +"What the seller can change"
  10. Changed1 schema field changed
    • addedOutput schema / properties / listing
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present only when the latest paid response doesn't match the listing's example. The data is delivered; the grade is capped at B until the listing matches.",
      +  "properties": {
      +    "matchesExample": {
      +      "description": "false: the paid response differs from the seller's own example",
      +      "type": "boolean"
      +    },
      +    "sellerFix": {
      +      "description": "What the seller changes to lift the B cap",
      +      "type": "string"
      +    },
      +    "warning": {
      +      "description": "How the real response differs, and where to read the fields",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "matchesExample",
      +    "warning",
      +    "sellerFix"
      +  ],
      +  "type": "object"
      +}
  11. Changed1 schema field changed
    • addedOutput schema / properties / buyers
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Who is really behind the seller's buyers. Never changes the grade.",
      +  "properties": {
      +    "buyerWallets30d": {
      +      "description": "Buyer wallets that paid the seller in 30 days",
      +      "type": "number"
      +    },
      +    "estimated": {
      +      "description": "true when counted from a sample of buyers",
      +      "type": "boolean"
      +    },
      +    "flags": {
      +      "description": "coordinated_wallets, self_funded, concentrated_buyers, shared_operator, estimated, partial_lookup",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "independentBuyers30d": {
      +      "description": "Independent buyers behind the seller's buyer wallets in 30 days (wallets funded from one source count as one)",
      +      "type": "number"
      +    },
      +    "organicShare": {
      +      "description": "0-1: share of 30-day volume from independent buyers",
      +      "type": "number"
      +    },
      +    "reviewed": {
      +      "description": "false until the seller's buyers have been reviewed (the biggest sellers are reviewed daily)",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "reviewed"
      +  ],
      +  "type": "object"
      +}
  12. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/idempotent safety, and the description adds substantial operational context beyond them: it is free, data reflects monitoring every 30 minutes plus real test payments, brand-new endpoints may return insufficient_data, uncataloged URLs return monitored:false and get auto-admitted within ~10 minutes, and a retest field appears while a failed paid test awaits re-test. These are non-obvious behaviors an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The verdict payload is front-loaded, then the when-to-use branching, then caveats and the docs link — a sensible order. It is dense and slightly overstuffed with parentheticals ("we count customers, not wallets", "see intake"), and the field enumeration partially duplicates the output schema, keeping it below a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still names the verdict enum and the anomaly fields so the agent knows what to look for, and it covers the unknown-endpoint path, data freshness, and retest state. Nothing needed to decide whether and how to call this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already tells the agent to pass the full URL including path exactly as it will be called. The description only implies endpoint identity ("one x402 endpoint") without adding format or edge-case guidance beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Get the trust verdict for one x402 endpoint") and enumerates the exact return fields: score 0-100, grade A-F, verdict enum, uptime, delivery-test status, payout-wallet incidents, buyer count. It explicitly distinguishes itself from check_payment and top_endpoints, so an agent can select it without reading sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when: "deciding whether an endpoint is trustworthy at all, before you have a price quote." Gives explicit when-not plus the alternative: if you already have the 402 quote and are about to pay, use check_payment; to discover endpoints, use top_endpoints. All three branches of the decision are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.