# ERC-681: URL Format for Transaction Requests

Source: https://www.eipsfordesigners.com/standards/ERC-681
Agent brief: https://www.eipsfordesigners.com/standards/ERC-681/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-681
Last reviewed: 2026-09-18
Last updated: 2026-09-18

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

## UX Impact

ERC-681 defines an ethereum: transaction-request URI grammar. Compatible wallets may parse and prefill editable fields, but scanning, deep links, chain_id, and parameter support are implementation-specific; show parsed values and network confirmation.

## Summary

ERC-681 defines a URI grammar for transaction requests that a compatible wallet may parse into editable payment or contract-call fields. It can carry a recipient, optional chain_id, amount, and function parameters, but the format does not require wallets to scan, deep-link, or support every parameter.

## For Designers

- Show the URI's recipient, amount, token, and target chain beside the QR or link.
- Let users review and edit parsed values before signing.
- Detect partial parsing and provide an explicit network or wallet fallback.

## Applicability

### When to Use

- Payment or contract-call links can reduce manual entry when the selected wallet supports the URI fields.
- The UI can show and let users review the parsed recipient, amount, token, and chain.
- The flow has an explicit fallback for wallets that do not scan, deep-link, or parse every field.

### When to Avoid

- The wallet cannot parse ERC-681 or the required deep-link transport.
- The recipient, amount, or target chain requires a server-authorized request instead of editable URI parameters.
- The app cannot provide an explicit review and fallback when a URI is only partially parsed.

## 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: A compatible wallet may parse and prefill the payment request for user review

### No standard for payment links

Impact: high

Old way: Every platform different payment format

New way: A shared ethereum: grammar can be supported by wallets that implement the relevant URI fields

### Can't share complex payment requests

Impact: high

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

New way: One URI can carry request details, while the wallet still validates and lets the user edit them

## 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

## Key Takeaways

- ERC-681 defines a transaction-request URI grammar, not a guaranteed wallet handoff.
- Show and let users review the recipient, amount, token, and target network.
- Treat chain_id and function parameters as optional, editable request data.
- Feature-detect scanning, deep links, and supported fields.
- Provide a manual or direct-wallet fallback when parsing is incomplete.

## UX Patterns

### Payment QR Code

Scannable payment request

User flow:

- Merchant creates payment request
- System generates ERC-681 URI
- Displays as QR code
- Customer scans with wallet
- Compatible wallet parses and may prefill 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
- Compatible wallet opens with parsed values when supported
- User confirms payment
- Donation complete

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

## Technical Notes

ERC-681 defines ethereum:address[@chain_id][/function]?[parameters]. value, gas, gasPrice, and function arguments are URI parameters that a compatible wallet may parse; chain_id is optional. The URI does not mandate scanning, deep links, field support, or immutable values. Show the parsed request and let the wallet/user review the final transaction.
