Docs / On-chain USDC payment check

How do I verify a Base USDC x402 payment on-chain?

Meridian by MioDio's POST /v1/payment-check reads a Base USDC Exact authorization or Transfer on-chain: nonce used, matching transfers in a 120-minute window or less, and confirmations, for $0.005 USDC via x402. Informational and point-in-time; if every on-chain read fails the call is 503 and not settled.

What is checked

Paid 200 is a payment_check card: status, nonce_used, matching_transfers, duplicate, txs[], tx (hash, found, confirmations, block_number) or null, latest_block, confirmations_min, as_of, partial, notes[], disclaimer.

Never exposes RPC URLs. Never signs or moves funds.

Request body

JSON properties (OpenAPI):

Send a tx hash, and/or payer + nonce, and/or payer + pay_to + amount (cheat sheet).

Call it

curl -i -X POST "https://meridian.miodiollc.com/v1/payment-check" \
  -H 'content-type: application/json' \
  -d '{"payer":"0x0000000000000000000000000000000000000001","nonce":"0xabababababababababababababababababababababababababababababababab","pay_to":"0x4DA1ED782BD61BaE9AdD5a5CaBbCf32f767f8d7F","amount":"5000","window_minutes":60}'

Unpaid -> HTTP 402 + PAYMENT-REQUIRED. 503 upstream_unavailable if every read fails (not settled). Partial 200 when some chain reads fail (charged).

Free sibling: GET /v1/payment/status

GET /v1/payment/status covers Meridian's own payments by tx or payer+nonce (30/min per IP). It does not return receipt_id. On a miss, use paid POST /v1/payment-check.

Price

$0.005 USDC on Base (~5000 atomic). Network eip155:8453. Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. payTo 0x4DA1ED782BD61BaE9AdD5a5CaBbCf32f767f8d7F.

What it does NOT do

Unpaid calls return HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE.

FAQ

Does this move funds?
No. On-chain read only.
What is the window max?
window_minutes is an integer from 1 to 120 (OpenAPI maximum).
How do I check Meridian's own payment status without paying?
GET /v1/payment/status (30/min per IP). It does not return receipt_id. On a miss, use paid POST /v1/payment-check.

Related