Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
59f1347
fix(evm): reject malformed CAIP-2 network identifiers in getEvmChainI…
HereForTheTechNFT Sep 21, 2026
7496533
feat: expand x402.org/protected routes (#3522)
CarsonRoscoe Sep 21, 2026
5d3a2b2
fix(ts): match HTTP routes on escaped and decoded paths (#3542)
PhilBot402 Sep 22, 2026
279f12c
fix(go): match HTTP routes on escaped and decoded paths (#3543)
PhilBot402 Sep 22, 2026
1f3ccfc
chore: harden verify-package-exports for @x402 releases (#3550)
phdargen Sep 22, 2026
5976943
chore: version typescript packages  (#3553)
phdargen Sep 22, 2026
74ee0f5
chore(go): release (#3555)
phdargen Sep 22, 2026
71eb9a5
chore: version python package  (#3554)
phdargen Sep 22, 2026
d6d2c58
specs(exact): correct Starknet settlement rules (follow-up to #2849) …
adipundir Sep 23, 2026
6fe0d4b
Specify exact Lightning on lnbtc (#2861)
benthecarman Sep 23, 2026
80c2fa4
docs(contracts): record Arc proxy deployments (#3523)
huaweigu Sep 23, 2026
8228bd6
spec(exact-hedera): add transferExecutor asset transfer method (#3205)
kierzniak Sep 24, 2026
0cb1a1f
fix: x402 site eip6492 pricing (#3565)
CarsonRoscoe Sep 24, 2026
75e12f0
fix(python): cap solana below 0.40 in the svm extra (#3573)
JulienKervarrec Sep 25, 2026
600131c
feat(svm): add batch settlement scheme (#3164)
lgalabru Sep 25, 2026
4fcf836
Pull request for mintlify/docs-update-1790356082356 (#3584)
mintlify[bot] Sep 25, 2026
9db8584
docs: link the merged Bitcoin Lightning exact spec (#3578)
Bartok9 Sep 27, 2026
51d879f
fix(e2e): build the TypeScript SDK before family selection
PhilBot402 Sep 27, 2026
7c15edc
fix(e2e): load @x402/cardano only when resolving server routes
PhilBot402 Sep 27, 2026
79be550
fix(e2e): drop the catalog note on the cardano helper
PhilBot402 Sep 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 39 additions & 0 deletions .github/workflows/check_payment_channels_codegen.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Check Payment Channels Codegen

on:
pull_request:
paths:
- ".github/workflows/check_payment_channels_codegen.yml"
- "typescript/pnpm-lock.yaml"
- "typescript/packages/mechanisms/svm/idl/**"
- "scripts/payment-channels-codegen/**"
- "typescript/packages/mechanisms/svm/src/payment-channels/generated/**"
- "typescript/packages/mechanisms/svm/package.json"
workflow_dispatch:

permissions:
contents: read
id-token: none

jobs:
check-payment-channels-codegen:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
with:
version: 11.1.1

- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: "24"
cache: "pnpm"
cache-dependency-path: scripts/payment-channels-codegen/pnpm-lock.yaml

- name: Install codegen dependencies
run: pnpm --dir scripts/payment-channels-codegen install --frozen-lockfile --ignore-scripts

- name: Verify generated client
run: pnpm --dir scripts/payment-channels-codegen check
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ jobs:
working-directory: ./typescript
run: pnpm turbo run build --filter='@x402/*'

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish all packages in release order
working-directory: ./typescript
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_aptos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/aptos run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/aptos package
working-directory: ./typescript/packages/mechanisms/aptos
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_avm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/avm run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/avm package
working-directory: ./typescript/packages/mechanisms/avm
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_axios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/axios run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/axios package
working-directory: ./typescript/packages/http/axios
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_cardano.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/cardano run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/cardano package
working-directory: ./typescript/packages/mechanisms/cardano
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_casper.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/casper run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/casper package
working-directory: ./typescript/packages/mechanisms/casper
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_concordium.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/concordium run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/concordium package
working-directory: ./typescript/packages/mechanisms/concordium
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/core package
working-directory: ./typescript/packages/core
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_evm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/evm run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/evm package
working-directory: ./typescript/packages/mechanisms/evm
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_express.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/express run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/express package
working-directory: ./typescript/packages/http/express
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_extensions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/extensions package
working-directory: ./typescript/packages/extensions
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_fastify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/fastify run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/fastify package
working-directory: ./typescript/packages/http/fastify
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_fetch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/fetch run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/fetch package
working-directory: ./typescript/packages/http/fetch
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_hedera.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/hedera run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/hedera package
working-directory: ./typescript/packages/mechanisms/hedera
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_hono.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/hono run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/hono package
working-directory: ./typescript/packages/http/hono
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_keeta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/keeta run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/keeta package
working-directory: ./typescript/packages/mechanisms/keeta
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_mcp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/mcp run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/mcp package
working-directory: ./typescript/packages/mcp
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_near.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/near run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/near package
working-directory: ./typescript/packages/mechanisms/near
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_next.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/next run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/next package
working-directory: ./typescript/packages/http/next
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_paywall.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/evm --filter=@x402/svm --filter=@x402/avm --filter=@x402/paywall run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/paywall package
working-directory: ./typescript/packages/http/paywall
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_stellar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/stellar run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/stellar package
working-directory: ./typescript/packages/mechanisms/stellar
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_svm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/svm run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/svm package
working-directory: ./typescript/packages/mechanisms/svm
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_tvm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/extensions --filter=@x402/tvm run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/tvm package
working-directory: ./typescript/packages/mechanisms/tvm
run: |
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/publish_npm_scoped_x402_xrpl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
pnpm install --frozen-lockfile --ignore-scripts
pnpm -r --filter=@x402/core --filter=@x402/xrpl run build

- name: Verify package exports
working-directory: ./typescript
run: pnpm verify:exports

- name: Publish @x402/xrpl package
working-directory: ./typescript/packages/mechanisms/xrpl
run: |
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ jobs:
working-directory: ./typescript
run: |
pnpm install --frozen-lockfile --ignore-scripts
pnpm run test
pnpm exec turbo run test --concurrency=50%
pnpm verify:exports
2 changes: 2 additions & 0 deletions contracts/evm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ Both contracts:
|-------|-------|------|
| Base Mainnet | [Deployed](https://basescan.org/address/0x402085c248EeA27D92E8b30b2C58ed07f9E20001) | [Deployed](https://basescan.org/address/0x4020A4f3b7b90ccA423B9fabCc0CE57C6C240002) |
| Base Sepolia | [Deployed](https://sepolia.basescan.org/address/0x402085c248EeA27D92E8b30b2C58ed07f9E20001) | [Legacy\*](https://sepolia.basescan.org/address/0x402039b3d6E6BEC5A02c2C9fd937ac17A6940002) |
| Arc Mainnet | — | [Deployed](https://explorer.arc.io/address/0x4020A4f3b7b90ccA423B9fabCc0CE57C6C240002) |
| Arc Testnet | [Deployed](https://explorer.testnet.arc.io/address/0x402085c248EeA27D92E8b30b2C58ed07f9E20001) | [Deployed](https://explorer.testnet.arc.io/address/0x4020A4f3b7b90ccA423B9fabCc0CE57C6C240002) |

**Batch settlement deployments**

Expand Down
6 changes: 4 additions & 2 deletions docs/core-concepts/network-and-token-support.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,11 @@ Both methods provide gasless transfers (facilitator sponsors gas), signature-bas

**Permit2 approval**: Requires a one-time onchain approval. x402 supports two gas sponsoring extensions that make this step gasless — see [EIP-2612 Gas Sponsoring](/extensions/eip2612-gas-sponsoring) and [ERC-20 Approval Gas Sponsoring](/extensions/erc20-approval-gas-sponsoring).

### EVM: Batch settlement (`batch-settlement`)
### Batch settlement (`batch-settlement`)

For high-frequency or repeated micropayment flows where settling every request onchain is too costly, x402 supports the **`batch-settlement`** scheme on EVM: the buyer deposits once into an escrow contract, signs off-chain vouchers per request, and sellers redeem in batches onchain. Per-request pricing still uses an **up-to** ceiling (`PaymentRequirements.amount`); actual charges can vary per request within that limit—see **[Batch settlement](/schemes/batch-settlement)**.
For high-frequency or repeated micropayment flows where settling every request onchain is too costly, x402 supports the **`batch-settlement`** scheme on EVM and Solana (SVM): the buyer deposits once into an escrow channel, signs off-chain cumulative vouchers per request, and sellers redeem in batches onchain. Per-request pricing still uses an **up-to** ceiling (`PaymentRequirements.amount`); actual charges can vary per request within that limit—see **[Batch settlement](/schemes/batch-settlement)**.

On EVM, the escrow is an onchain contract using EIP-3009 or Permit2. On SVM, the escrow uses the [payment-channels program](https://github.com/solana-foundation/payment-channels), the same program used by `upto`. The TypeScript SDK supports both networks; Go and Python currently support EVM only—see [SDK Features](/sdk-features).

### Specifying Payment Amounts

Expand Down
Loading
Loading