---
title: "payTo is not the bytes a payment signs over — x402 defect class unpayable-payto"
description: "payTo is not the bytes a payment signs over (unpayable-payto), an x402 defect class: payTo is a 20-byte 0x address on an EVM rail, or a base58 pubkey on Solana — not a name, and not a wallet pasted into the wrong rail's entry. Detectable by an unpaid probe. Most clients throw inside their signing library. The seller never learns a buyer came."
canonical: "https://scvd.store/defects/unpayable-payto"
url: "https://scvd.store/defects/unpayable-payto"
term_code: "unpayable-payto"
defined_in: "https://scvd.store/defects"
data: "https://scvd.store/defects.json"
vocabulary_version: "22"
license: "https://creativecommons.org/licenses/by/4.0/"
---

# payTo is not the bytes a payment signs over

`unpayable-payto` — an x402 defect class.

**Asserts:** payTo is a 20-byte 0x address on an EVM rail, or a base58 pubkey on Solana — not a name, and not a wallet pasted into the wrong rail's entry.

**Costs:** Most clients throw inside their signing library. The seller never learns a buyer came.

**Detectable:** unpaid — a free probe can see it

**Falsified by:** The payTo parsing as a valid address for the rail its own entry names.

**How an operator clears it:** Give each accepts entry its own rail's address format: a 20-byte 0x address on EVM entries, a base58 pubkey on Solana entries. The commonest cause is one wallet string pasted across every rail's entry.

**What a buyer does:** Never resolve a name in payTo yourself and pay the result: your signature would bind to whatever the resolver said that second. Refuse until payTo is a concrete address in the format of its own entry's rail.

**Our signal:** `accepts`

---

Vocabulary v22, CC BY 4.0. Every class: https://scvd.store/defects. Machine-readable, with falsifiers and cross-instrument mappings: https://scvd.store/defects.json.

A class describes a property of one endpoint at one moment and never accumulates into a judgment on an operator.
