# EIP-681: URL Format for Transaction Requests

Source: https://www.eipsfordesigners.com/standards/EIP-681
Agent brief: https://www.eipsfordesigners.com/standards/EIP-681/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/EIP-681
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | Onboarding & Access |
| Journey stages | Discovery & Connection |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-681 |
| Discussion search | https://ethereum-magicians.org/search?q=EIP-681 |

## UX Impact

Payment requests encoded as ethereum: URLs work like bitcoin: links — scannable QR codes or clickable links trigger wallet payment flows. Design implications: generate QR codes for payment requests with pre-filled recipient, amount, and token type; support ENS names alongside hex addresses; use scientific notation (2.014e18) for human-readable amounts; design chain_id switching prompts when payment targets different network. Design decisions: decide whether to make gas parameters user-editable or hidden, handle token transfers (ERC-20 function calls) vs native ETH differently in UI, design validation for malformed URLs, consider showing fiat equivalents alongside crypto amounts.

## Summary

EIP-681 defines payment URLs and QR codes. Turn "Send 0.1 ETH to 0x7a3..." into a scannable QR code or clickable link. When scanned, the wallet auto-fills recipient, amount, and even contract calls. Perfect for point-of-sale payments, invoices, and donation buttons.

## For Designers

- You can design UI that delivers scan QR, everything pre-filled.
- You can design UI that delivers ethereum: URI format works everywhere.
- You can design UI that delivers one QR code contains all details.

## Applicability

### When to Use

- Your product addresses: manual entry of payment details is error-prone.
- Your product addresses: no standard for payment links.
- The flow should deliver: scan QR, everything pre-filled.
- You are designing a payment qr code experience with visible states and recovery paths.

### When to Avoid

- Include chain_id parameter.
- Show amount, recipient alongside QR.
- Use stablecoin or calculate at scan time.
- Wallet or chain support is fixed and users cannot choose providers.

## Problems It Solves

### Manual entry of payment details is error-prone

Impact: critical

Old way: Copy address, type amount, hope you got it right

New way: Scan QR, everything pre-filled

### No standard for payment links

Impact: high

Old way: Every platform different payment format

New way: ethereum: URI format works everywhere

### Can't share complex payment requests

Impact: high

Old way: Explain: "send 100 USDC to this address on Polygon..."

New way: One QR code contains all details

## Anti-Patterns

### Not specifying chain in multi-chain apps

Severity: critical

Payment goes to wrong network

Instead: Include chain_id parameter

### QR codes without human-readable details

Severity: high

User can't verify before scanning

Instead: Show amount, recipient alongside QR

### Hardcoded USD values in ETH

Severity: medium

ETH price changes, $10 becomes $8

Instead: Use stablecoin or calculate at scan time

## UI Components

### PaymentQRGenerator

Creates QR code from payment details
States: generating, ready, error
Props: recipient, amount, token, chainId, memo

### PaymentLinkButton

Button that opens wallet with payment
States: idle, clicked, no-wallet
Props: uri, label, amount

### URIDisplay

Shows raw ethereum: URI with copy
States: visible, copied
Props: uri, onCopy

## On Monad

### Payment Confirmation

Ethereum: Scan → pay → wait 12+ seconds

Monad: Instant confirmation after payment

Design implication: Can show "Paid ✓" immediately

## Key Takeaways

- EIP-681 = payment QR codes and links
- Always show payment details alongside QR
- Include chain_id for multi-chain support
- Works with any EIP-681 compatible wallet
- Great for point-of-sale and donations

## UX Patterns

### Payment QR Code

Scannable payment request

User flow:

- Merchant creates payment request
- System generates EIP-681 URI
- Displays as QR code
- Customer scans with wallet
- Wallet auto-fills payment

Mockup registry key: `concept/physical-link` (React UI on the live standard page).

### Donate Button

One-click donation with pre-filled amount

User flow:

- User clicks donation amount
- Link contains ethereum: URI
- Wallet opens with amount filled
- User confirms payment
- Donation complete

Mockup registry key: `concept/one-click-swap` (React UI on the live standard page).

## Technical Notes

EIP-681 format: ethereum:address[@chain_id][/function]?[parameters]. Parameters: value (in wei), gas, gasPrice, and arbitrary function params. Examples: ethereum:0x7a3...?value=1e17 for 0.1 ETH, ethereum:0x7a3.../transfer?address=0x&uint256=1e18 for ERC-20 transfer. Most wallets support scanning or deep linking.
