Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1262 commits
Select commit Hold shift + click to select a range
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
5b7078e
fix(e2e): stop the mechanisms catalog from importing a built package …
PhilBot402 Sep 27, 2026
02e80f3
fix(e2e): retry public Solana devnet 429s in swig setup (#3595)
PhilBot402 Sep 27, 2026
dd89698
feat(evm): add Arc default stablecoins (#3590)
NotMcAfee Sep 28, 2026
5e97d9a
docs: fix broken relative links in guides, examples and specs (#3596)
JulienKervarrec Sep 28, 2026
c84154b
perf(svm): cache derived payment-channel PDAs (#3601)
notorious-d-e-v Sep 28, 2026
a9955ae
feat(evm): add Monad testnet USDC default asset (#3570)
phdargen Sep 28, 2026
5eee1e3
docs: show EVM and Solana in middleware README examples (#3619)
notorious-d-e-v Sep 29, 2026
a349e7f
feat(svm): Go batch-settlement, unified PaymentChannelStorage, and pa…
phdargen Sep 29, 2026
da8c2f4
chore: version python package  (#3628)
phdargen Sep 29, 2026
ced627c
chore: version typescript packages  (#3627)
phdargen Sep 29, 2026
9320504
Pull request for mintlify/docs-update-1790707394690 (#3626)
mintlify[bot] Sep 29, 2026
6b6ee91
chore(go): release (#3629)
phdargen Sep 29, 2026
46beddd
fix(svm): restore server-signed channel refunds (#3637)
notorious-d-e-v Oct 2, 2026
43aaecb
feat(paywall): add rpcUrls config for the SVM paywall (#3599)
notorious-d-e-v Oct 2, 2026
03b3919
fix(svm): restore server-signed channel refunds after restart (#3664)
PhilBot402 Oct 2, 2026
e213c63
fix: svm upto example (#3639)
phdargen Oct 2, 2026
606ced0
fix: fastify path bypass (#3577)
CarsonRoscoe Oct 2, 2026
8355435
fix: derive batch-settlement charge baseline from onchain totalClaime…
CarsonRoscoe Oct 2, 2026
751590a
fix(svm): enforce settled + amount minimum at batch facilitator verif…
phdargen Oct 2, 2026
cb0ec5b
feat: add EVM auth capture to go server & facilitator SDKs (#3622)
CarsonRoscoe Oct 5, 2026
28376d6
feat(ts): auth capture sdk v1.1 (#3203)
phdargen Oct 6, 2026
586e55f
Document auth-capture v1.1 SDK support (#3708)
mintlify[bot] Oct 6, 2026
1566e13
feat(builder-code): add facilitator-authored settlement metadata (m) …
phdargen Oct 6, 2026
10b2d06
Document settlement metadata (`m`) field in builder-code extension (#…
mintlify[bot] Oct 6, 2026
b0c41d8
style(evm): tidy auth-capture imports (#3721)
PhilBot402 Oct 7, 2026
7f2b2f1
feat(python): add builder-code settlement metadata m (#3723)
PhilBot402 Oct 7, 2026
f8f8330
style(python): tidy builder-code CBOR helpers (#3753)
PhilBot402 Oct 10, 2026
c7e118e
ci(python): pin CI sync jobs to CPython 3.13 (#3771)
epistemedeus Oct 13, 2026
6c470a8
chore: remove outdated ROADMAP and PROJECT-IDEAS docs (#3789)
PhilBot402 Oct 13, 2026
a0f37d0
docs: update Celo facilitator entry with Sepolia and Permit2 assets (…
GigaHierz Oct 13, 2026
a3e342e
fix(svm): fail batch verify closed when afterVerify store calls fail …
notorious-d-e-v Oct 13, 2026
95680ec
fix(next): preserve settled null-body responses (#3733)
sunruize93-cmyk Oct 13, 2026
e95b066
fix: http resource server head bug (#3796)
CarsonRoscoe Oct 13, 2026
faa1c69
security: update security.md (#3823)
CarsonRoscoe Oct 15, 2026
d2fa3bc
docs(contracts): record Monad testnet batch settlement deployments (#…
Im-Madhur-Gupta Oct 22, 2026
8282b4d
docs(networks): add Sui to the CAIP-2 and token-support registries (#…
DrVelvetFog Oct 22, 2026
0ee850d
Update docs/core-concepts/facilitator.md (#3397)
mintlify[bot] Oct 22, 2026
1102257
docs(specs): fix stale Express API name and broken §9 link in v2 spec…
shlee1223 Oct 22, 2026
71e8001
docs: add Hosannaith to third-party extensions (#3786)
cameron4316 Oct 22, 2026
ceed751
docs: add TRDEFI Arc facilitator (#3625)
TRDEFI Oct 22, 2026
306fd36
fix: propagate verification message to SettleResponse.errorMessage (#…
notorious-d-e-v Oct 22, 2026
e7a3b4f
fix(svm): report batch request id reuse with a new ceiling distinctly…
notorious-d-e-v Oct 22, 2026
9da8085
fix(evm): normalize EIP-3009 signature v to 27 or 28 (#3822)
notorious-d-e-v Oct 22, 2026
fa5eb06
fix(core): enforce settlement override ceiling against PaymentRequire…
Eras256 Oct 22, 2026
e411a1a
fix(python): reject flat create_headers dicts (#3587)
nniiovoo Oct 22, 2026
deeb1f4
fix(extensions): make offer-receipt canonicalize conform to RFC 8785 …
MajorTal Oct 22, 2026
6f76f5b
fix(mcp): snapshot 402 accepts before scheme enrichers (#3496)
PhilBot402 Oct 22, 2026
fa1963a
fix(go): reject non-canonical EIP-3009 ECDSA signatures (#2454)
wnjoon Oct 22, 2026
00900b3
fix(fastify): complete buffered raw responses (#3548)
sunruize93-cmyk Oct 22, 2026
20d9924
fix(next): preserve custom unpaid text responses (#3669)
sunruize93-cmyk Oct 22, 2026
d8e1e7b
fix(cardano): submit the client's signed transaction bytes unchanged …
let-the-dreamers-rise Oct 22, 2026
202ba81
fix(axios): keep Cookie arrays on the paid retry (#3728)
Bartok9 Oct 22, 2026
40e72d8
fix(python): run scheme payload creation off the event loop in x402Cl…
JulienKervarrec Oct 22, 2026
c2dbed0
fix(go): cap MCP recovery retry timeouts (#3581)
viviviviviid Oct 22, 2026
d5b2a8a
docs(stellar): cross-reference areFeesSponsored's unsupported-false l…
Eras256 Oct 22, 2026
0aee759
feat(stellar): add typed simulation errors (#2975)
realmehmetali Oct 22, 2026
ded4663
fix(go): warn when gas sponsoring lacks RPC capability (#3551)
wnjoon Oct 22, 2026
7438976
fix(evm): report payer code-lookup failures as failed_to_verify_signa…
Bartok9 Oct 22, 2026
521f32d
docs: add Tanilo x402 Guard to third-party extensions (#3816)
TKCollective Oct 22, 2026
732c181
fix(core,express): include error reason in 402 JSON body for non-brow…
clawdbotworker Oct 22, 2026
bc31d3e
fix(core): do not mutate the extensions object while building a 402 (…
holistis Oct 22, 2026
c1212ca
fix(bazaar): avoid schema compile in no-eval runtimes (#3648)
Niri7981 Oct 22, 2026
b70da0d
fix(extensions): keep bazaar method consistent with declared input (#…
dor-sr Oct 22, 2026
24533d6
fix(fastapi): keep initialization retries off the event loop (#3613)
Adkid-Zephyr Oct 22, 2026
6c379c4
fix(python): reject V1 payloads in HTTP resource server (#3715)
s1ns3nz0 Oct 22, 2026
1e7de94
fix(python): drop response-only CORS header from client retries (#3717)
agnij-dutta Oct 22, 2026
0f5dfde
docs(python): fix middleware README examples (#3832)
tahzeer Oct 22, 2026
0ff11aa
fix(python): bound x402[mcp] to mcp<2 (#3425)
snellsteven Oct 22, 2026
236460f
docs: explain request timeouts and safe payment retries (#3387)
Samarth208P Oct 22, 2026
3ca54cb
fix(core): validate CAIP-2 network syntax (#3285)
shibutatsu Oct 22, 2026
76f2f28
fix(ts): bound HTTP response body reads (#3400)
Ectsang Oct 22, 2026
332f65d
fix(stellar): surface real RPC failure detail in settle response (#31…
wakqasahmed Oct 22, 2026
c2a8924
docs: add X Pay Base facilitator (#3746)
xpayllc Oct 22, 2026
7617ece
fix: restore main after colliding merges (#2454/#3355 Go build, #3795…
carsonbot402 Oct 22, 2026
3bd3c1d
fix(core): do not treat OPTIONS preflight as a paid request (#3738)
agnij-dutta Oct 22, 2026
7b98d49
docs: add Elara to third-party extensions (#3469)
navigatorbuilds Oct 22, 2026
fbeb46a
docs: add PipRail to third-party SDKs (#2672)
John-Weeks-Dev Oct 22, 2026
58a5d7d
docs(specs): say what a browser needs to read the price and send the …
parthod0x Oct 22, 2026
5e8688a
fix(express): send text/plain payment-error bodies as text (#3668)
Bartok9 Oct 22, 2026
b5ee357
fix(evm): warn when gas sponsoring is advertised but the client canno…
GigaHierz Oct 22, 2026
a9772e5
fix(paywall): prevent reflected XSS in v1 and v2 paywalls (#3855)
asooge Oct 22, 2026
470419d
fix(batch-settlement): fail closed when refund emits no Refunded amou…
SashaMIT Oct 22, 2026
9c50903
Document rpcUrl requirement for gas sponsoring extensions (#3889)
mintlify[bot] Oct 22, 2026
2b06a54
docs(xrpl): add upto XRPL scheme specification (#3023)
dimitricole Oct 22, 2026
2cf50eb
fix: resolve post-merge SDK regressions (#3893)
CarsonRoscoe Oct 22, 2026
56054d8
fix(fetch): skip incompatible legacy accepts entries (#2730)
rhein1 Oct 22, 2026
79263af
docs: add raxol_payments to third-party SDKs (#3107)
DROOdotFOO Oct 23, 2026
b636cf7
fix(python): accept mapping values from create_headers (#3895)
nniiovoo Oct 23, 2026
e9b2b24
fix(python): include rejection reason in HTTP 402 JSON body (#3883)
PhilBot402 Oct 23, 2026
45e29a6
fix(python): reject settlement overrides above the authorized amount …
PhilBot402 Oct 23, 2026
960e7ee
fix(python): match bazaar method to declared input (#3880)
PhilBot402 Oct 23, 2026
62fc03e
fix(stellar): require stellar-sdk 16.4.1, which ships axios 1.20.0 (#…
parthod0x Oct 23, 2026
6b0cf0e
fix(go): enforce settlement override ceiling against PaymentRequireme…
PhilBot402 Oct 23, 2026
dadb868
fix(python): restore x402MCPClientSync hooks and run mcp tests in CI …
agnij-dutta Oct 23, 2026
90addfa
fix(py): send text/plain payment-error bodies as text (#3901)
PhilBot402 Oct 23, 2026
20c9d06
fix(go): send text/plain payment-error bodies as text (#3902)
PhilBot402 Oct 23, 2026
df7dba4
fix(python): reject malformed V2 CAIP-2 networks (#3878)
PhilBot402 Oct 23, 2026
d7b428f
fix(svm): record seal distributions through callback (#3606)
notorious-d-e-v Oct 24, 2026
8c2b431
fix(core): load @x402/paywall when no paywall provider is registered …
notorious-d-e-v Oct 24, 2026
4241d56
docs: add Sui facilitator to the facilitators directory (#2619)
DrVelvetFog Oct 24, 2026
f63591e
Update docs/sdk-features.md (#3911)
mintlify[bot] Oct 26, 2026
c99f931
docs(specs): align the SVM SettlementResponse payer description with …
shlee1223 Oct 26, 2026
2ff672c
fix(examples/python): parse facilitator payment requirements by x402 …
PhilBot402 Oct 26, 2026
af6665b
docs(specs): convert v2 spec pseudo-headings to real markdown heading…
ruiruii Oct 26, 2026
907ca0b
docs: split third-party extension listings by interoperability (#3915)
CarsonRoscoe Oct 26, 2026
bbd59bf
fix(evm): warn when gas sponsoring cannot read the chain (#3903)
PhilBot402 Oct 26, 2026
02a5c74
fix(examples): refuse invalid facilitator requests without HTTP 500 (…
PhilBot402 Oct 26, 2026
51a0664
docs(specs): document facilitator error messages (#3947)
hyphy-void Oct 26, 2026
fbe5cac
fix(http): include rejection reason in 402 JSON body (#3882)
PhilBot402 Oct 26, 2026
67de5b6
fix(go): reject malformed V2 CAIP-2 networks (#3884)
PhilBot402 Oct 26, 2026
ffd8ee8
fix(bazaar): advertise a method that fits the declared input (#3879)
PhilBot402 Oct 26, 2026
7976e77
fix(python): respect networks filter for V1 in exact EVM/SVM client r…
PhilBot402 Oct 26, 2026
4f5b83a
fix(svm): use mint token program in Go exact payments (#3932)
AkshatGada Oct 26, 2026
b187119
docs(specs): define SVM transaction version negotiation (#3473)
lgalabru Oct 26, 2026
1896767
fix: ship Apache-2.0 LICENSE and NOTICE for Python, TypeScript, and G…
PhilBot402 Oct 26, 2026
b609bf5
fix(core): derive one wildcard pattern per namespace, not one for the…
Eras256 Oct 26, 2026
87a9877
fix(bazaar): use raw resource URL as canonical for opaque-origin sche…
Eras256 Oct 26, 2026
53486aa
fix(evm): classify reverted verify simulations in Go and TypeScript (…
shuhei0866 Oct 26, 2026
97a3625
fix(typescript): reject non-canonical high-s EOA signatures in EIP-30…
kakedashi3 Oct 26, 2026
b8b608a
fix(python): reject non-canonical high-s EIP-3009 signatures (#3912)
ketchupz1999 Oct 26, 2026
be54b7d
evm batch-settlement managed voucher mode (#3725)
phdargen Oct 26, 2026
477bdc7
docs(exact/svm): add multi-payee splits to the exact scheme (#3221)
lgalabru Oct 26, 2026
72dde23
feat(svm): support for transaction v1 in `exact` (#3474)
lgalabru Oct 26, 2026
57e703e
feat(svm): support for transaction v1 in `upto` (#3710)
lgalabru Oct 26, 2026
2318d04
feat(go): facilitator-managed voucher custody for EVM batch settlemen…
phdargen Oct 27, 2026
3d41f71
Docs: batch-settlement facilitator custody & AfterSettleAbortError (#…
mintlify[bot] Oct 27, 2026
aa711d1
Update docs/guides/mcp-server-with-x402.mdx (#3869)
mintlify[bot] Oct 27, 2026
7121dad
Go gas-sponsoring extension: document warning behavior for missing RP…
mintlify[bot] Oct 27, 2026
a8bd9a3
docs(specs): auth-capture collectorData is the signature as received …
robertolocatelli81-dev Oct 27, 2026
b6c7973
fix(evm): align high-s EIP-3009 checks and reuse payer code (#3964)
PhilBot402 Oct 27, 2026
2430637
fix(evm): handle AssetContractCheck rejection (#3974)
PhilBot402 Oct 27, 2026
f59cf4e
Update docs/advanced-concepts/wallet-compatibility.mdx (#3987)
mintlify[bot] Oct 27, 2026
d6bc59a
test(python): strengthen batch-settlement recovery coverage (#3979)
shuhei0866 Oct 27, 2026
edf6d9e
docs(extensions): bind the payment identifier to a request fingerprin…
holistis Oct 27, 2026
b5b0c13
fix(svm): diagnose recipient ATA errors after failed simulation (#3962)
AkshatGada Oct 27, 2026
adf5d12
fix(go): derive one wildcard pattern per namespace (#3991)
PhilBot402 Oct 27, 2026
374aef0
fix(python): derive one facilitator wildcard per CAIP-2 namespace (#3…
PhilBot402 Oct 27, 2026
3525075
fix(core): run afterVerify when verify returns isValid false (#3989)
PhilBot402 Oct 27, 2026
4f8eaa3
fix(python): run after_verify on facilitator rejection (#3988)
PhilBot402 Oct 27, 2026
cb0e048
Update docs/advanced-concepts/lifecycle-hooks.mdx (#3996)
mintlify[bot] Oct 27, 2026
7abd80f
feat(typescript): call settleOnCancel without a before-handler settle…
PhilBot402 Oct 27, 2026
ac5ba1c
Python: run settle_on_cancel without a before-handler settle gate (#3…
PhilBot402 Oct 27, 2026
435f7f0
feat(python): port AfterSettleAbort fail-closed settle from Go (#3726…
PhilBot402 Oct 27, 2026
636f585
feat(typescript): fail closed on AfterSettleAbortError from afterSett…
PhilBot402 Oct 27, 2026
1148309
fix(evm): give the declaration build a 4GB heap (#4002)
PhilBot402 Oct 27, 2026
74d53f0
fix(ts,go): bound HTTP response body reads (#3368)
PhilBot402 Oct 27, 2026
f5c9808
fix(python): bound HTTP response body reads (#3369)
PhilBot402 Oct 27, 2026
6b578ec
fix(svm): record cooperative close payouts (#3951)
PhilBot402 Oct 27, 2026
dbe1080
style(go): clean up recent SDK and example code (#4004)
PhilBot402 Oct 27, 2026
8355d00
fix: e2e failures and flaky unit tests (#4013)
phdargen Oct 27, 2026
5847ee5
feat(go/svm/upto): make facilitator-built transaction version configu…
phdargen Oct 27, 2026
7163a9d
fix(svm): diagnose recipient ATA errors after failed simulation (#4026)
PhilBot402 Oct 28, 2026
ec61ea5
fix(evm): reject empty ERC-6492 factory calldata (#4021)
PhilBot402 Oct 28, 2026
e04427e
test(mcp): cover hostile payment terms with real spend controls (#3999)
vendrell46 Oct 28, 2026
39b5440
fix(evm): return invalid_payload for malformed exact payloads (#3975)
PhilBot402 Oct 28, 2026
712e20e
fix(python): return invalid_exact_evm_payload for malformed exact EVM…
deniskrds Oct 28, 2026
2dc791f
feat(ts/svm/upto): make facilitator-built transaction version configu…
PhilBot402 Oct 28, 2026
261d0c5
Update docs/schemes/upto.mdx (#4029)
mintlify[bot] Oct 28, 2026
0eaa815
fix(python): reject non-object payment JSON (#3917)
nniiovoo Oct 28, 2026
db2c98e
fix(avm): require canonical CAIP-2 networks (#3894)
CarsonRoscoe Oct 28, 2026
c5bed45
feat(canton): add @x402/canton exact-scheme mechanism (#3242)
nicky2pc Oct 28, 2026
8d81caf
Add Canton Network exact scheme documentation (#4031)
mintlify[bot] Oct 28, 2026
8065278
fix: upgrade zod to ^4.6.6 (GHSA-mrhx-c7xc-m3w5) (#3983)
PhilBot402 Oct 28, 2026
14e83aa
fix(go): upgrade SDK dependencies for published security advisories (…
phdargen Oct 28, 2026
443e3f4
fix(python): raise dependency floors for published security advisorie…
phdargen Oct 28, 2026
374216b
chore(ts): raise dependency floors for known CVEs (#3981)
phdargen Oct 28, 2026
f22cb90
chore: version python package  (#4035)
phdargen Oct 28, 2026
bf8d857
chore(go): release (#4037)
phdargen Oct 28, 2026
e4a0868
chore: version typescript packages  (#4036)
phdargen Oct 28, 2026
6f1a533
feat(svm): support for transaction v1 in `batch-settlement` + `exact`…
lgalabru Oct 29, 2026
b53bc3b
Pull request for mintlify/docs-update-1793258818360 (#4049)
mintlify[bot] Oct 29, 2026
a4ba5d1
docs: fix the TON testnet USDT address in the network and token table…
shlee1223 Oct 29, 2026
79418be
fix(go): return isValid:false from example facilitator /verify (#3938)
wnjoon Oct 29, 2026
3c0a740
fix(core): reject non-object JSON payment headers (#4051)
PhilBot402 Oct 29, 2026
957b1e4
style(python): share discovery body reads and version checks (#4053)
PhilBot402 Oct 29, 2026
14bc0fb
docs(facilitators): add AlgoVoi chain-agnostic multi-chain facilitato…
chopmob-cloud Oct 29, 2026
7074943
fix(core): isolate facilitator lifecycle hook errors (#3151)
hung-yueh Oct 30, 2026
324b658
fix(go): resolve read signer for EVM allowance short-circuit (#3916)
wnjoon Oct 30, 2026
8e606c9
Update docs/advanced-concepts/lifecycle-hooks.mdx (#4070)
mintlify[bot] Oct 31, 2026
e208bd3
fix(go): trim trailing slash from facilitator URL (#4067)
shlee1223 Oct 31, 2026
f3cb4bb
chore(core): trim redundant facilitator hook comments (#4076)
PhilBot402 Nov 1, 2026
389906d
style(go): drop restated Permit2 allowance comments (#4077)
PhilBot402 Nov 2, 2026
f99b2dc
fix(evm): persist sync auth-capture balances for refunds (#4092)
mortezashojaei Nov 2, 2026
9d9895c
fix(go): use configured RPC for batch-settlement gas sponsoring (#4088)
wnjoon Nov 2, 2026
897a385
style(ts): remove dead helpers and redundant fallbacks (#4056)
PhilBot402 Nov 2, 2026
8cd4cc2
fix(python): isolate facilitator advisory hook errors (#4072)
PhilBot402 Nov 2, 2026
70303ce
fix(evm): return invalid_exact_evm_payload for malformed exact payloa…
PhilBot402 Nov 2, 2026
c6c744d
fix(python): correct SIWX nonce-storage record_nonce capability check…
tahzeer Nov 2, 2026
5495ae6
fix(go): preserve abort-hook message in V2 facilitator errors (#4082)
tahzeer Nov 2, 2026
a17c668
fix(go): remove unimplemented ProcessPaymentRequest stub (#4096)
wnjoon Nov 2, 2026
79b45eb
style(evm): collapse exact payload field checks (#4103)
PhilBot402 Nov 2, 2026
0df817d
style(go): drop restated comments from recent SDK fixes (#4102)
PhilBot402 Nov 2, 2026
b966f5a
style(python): drop facilitator hook warning docstring (#4101)
PhilBot402 Nov 2, 2026
0e85203
fix(python): return structured invalid_upto_* errors for malformed up…
scks1 Nov 2, 2026
0c58a71
fix(python): reject failed SVM confirmations (#4033)
snuff12 Nov 2, 2026
5220ceb
docs: add teppi-client to third-party extensions (#3836)
teppi-xyz Nov 2, 2026
3a5c6d8
test(python): cover delegated voucher recovery (#4003)
zzhangio Nov 3, 2026
a905cc2
docs: fix export names in evm, avm and svm package READMEs (#4112)
shlee1223 Nov 3, 2026
58e667f
fix(evm): return invalid_upto_evm_payload for malformed upto Permit2 …
PhilBot402 Nov 3, 2026
29a8124
fix(core): fail closed when a gate hook throws (#3702)
Bartok9 Nov 4, 2026
8736fb7
Update docs/advanced-concepts/lifecycle-hooks.mdx (#4132)
mintlify[bot] Nov 4, 2026
7c9d6ad
fix(xrpl): enforce spend caps in issued-currency units (#4110)
mortezashojaei Nov 4, 2026
0f41a8d
fix(core): use phase-specific error codes for throwing gate hooks (#4…
PhilBot402 Nov 4, 2026
c349511
feat(ts): facilitator-managed voucher custody for EVM batch settlemen…
phdargen Nov 4, 2026
2884003
Pull request for mintlify/docs-update-1793816377937 (#4135)
mintlify[bot] Nov 4, 2026
91806a3
chore: version python package  (#4137)
phdargen Nov 4, 2026
d95724b
chore(go): release (#4138)
phdargen Nov 4, 2026
3414a56
chore: version typescript packages  (#4136)
phdargen Nov 4, 2026
2ef9f38
fix(python/mcp): preserve payment approval and settlement outcomes (#…
notorious-d-e-v Nov 5, 2026
49e9618
Python MCP lifecycle hooks docs update (#4143)
mintlify[bot] Nov 5, 2026
cfbfe65
fix(core): forward facilitator abort hook message (#4099)
PhilBot402 Nov 5, 2026
7604b1a
Update docs/advanced-concepts/lifecycle-hooks.mdx (#4144)
mintlify[bot] Nov 5, 2026
38fabd0
fix(python): preserve abort-hook message in V2 facilitator errors (#4…
PhilBot402 Nov 5, 2026
b9cbd85
fix(next): skip bazaar import when the extension is already registere…
PhilBot402 Nov 5, 2026
72bb2d1
feat(python): dispatch settlement_preflight_failed cancellation (#4148)
PhilBot402 Nov 5, 2026
8827cf1
Update docs/advanced-concepts/lifecycle-hooks.mdx (#4154)
mintlify[bot] Nov 5, 2026
6a773db
fix(python): reject non-object JSON in schema helpers (#4044)
nniiovoo Nov 5, 2026
4f64aba
fix: update svm spec/implementations per Phantom Lighthouse update (#…
CarsonRoscoe Nov 6, 2026
95625e4
fix(evm): scope batch channel operations by network (#4141)
mortezashojaei Nov 6, 2026
2708582
SVM exact scheme: preflight/postflight allowlist + Lighthouse guard d…
mintlify[bot] Nov 6, 2026
e7cdc70
chore(python): drop duplicated bytes parsing and narration (#4168)
PhilBot402 Nov 6, 2026
bd1e8c1
fix(go/mcp): report unknown payment cancellation (#4151)
PhilBot402 Nov 6, 2026
54e20e8
fix(mcp): report unknown payment cancellation outcome (#4152)
PhilBot402 Nov 6, 2026
2474b3b
fix(go): fail closed when a gate hook returns an error (#4149)
PhilBot402 Nov 6, 2026
68f77f4
fix(go): report unknown outcome when cancel facilitator fails (#4172)
PhilBot402 Nov 6, 2026
d5d84bd
chore(ts): drop duplicated batch-settlement checks (#4167)
PhilBot402 Nov 6, 2026
96d6440
fix(casper): return the transaction hash of a failed exact settlement…
davidatwhiletrue Nov 6, 2026
928e064
fix(python): use fixed errors when a gate hook throws (#4153)
PhilBot402 Nov 6, 2026
0f5f288
Document before-hook error codes in lifecycle hooks (#4176)
mintlify[bot] Nov 6, 2026
f80975f
fix(go): scope batch channel manager to configured network (#4146)
phdargen Nov 6, 2026
513dd66
fix(go/svm): return batch-settlement settle failures that broadcast a…
phdargen Nov 6, 2026
88b66dd
fix(python): scope batch-settlement channel manager to configured net…
PhilBot402 Nov 8, 2026
6e9400d
chore(evm): inline batch-settlement channel network reader (#4201)
PhilBot402 Nov 9, 2026
ac01018
fix(python): only retry a payment when on_payment_response explicitly…
agnij-dutta Nov 9, 2026
9843d75
docs: add AffixIO to third-party utilities (#3518)
AffixIO Nov 9, 2026
ff58685
fix(svm): keep distribute extra.channels as []string (#4203)
PhilBot402 Nov 10, 2026
9785c50
refactor: drop restated comments and collapse duplicated facilitator …
PhilBot402 Nov 10, 2026
1d2858c
feat(evm): add Robinhood Chain (eip155:4663) with USDG as default ass…
soli0x Nov 10, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
34 changes: 34 additions & 0 deletions .agents/skills/authoring-specs/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: authoring-specs
description: Guidelines for authoring x402 specification files. Use when writing or proposing a new x402 spec, such as a per-network scheme spec (scheme_<name>_<chain>.md).
---

# Authoring x402 specs

Guidance for writing x402 specification files under `specs/`. Use RFC-2119 keywords for normative statements (MUST / MUST NOT, SHOULD / SHOULD NOT, MAY).

## General rules

These apply to every spec type (scheme, extension). The references below add type-specific detail.

### Naming

- Name schemes and extensions in lowercase, hyphen-separated kebab-case (e.g. `batch-settlement`, `offer-receipt`), never camelCase.

### Protocol version, networks, and units

- Target protocol v2 only: `x402Version: 2`, the `amount` field (not v1's `maxAmount`), and the `PAYMENT-REQUIRED` / `PAYMENT-SIGNATURE` / `PAYMENT-RESPONSE` headers (not v1's `X-PAYMENT` / `X-PAYMENT-RESPONSE`). See the [v1 to v2 migration guide](../../../docs/guides/migration-v1-to-v2.mdx).
- Use canonical CAIP-2 network notation (e.g. `eip155:84532`, not `base-sepolia`).
- Use atomic units for all amounts.

### Wire format

- Be transport agnostic: specify message contents, not how a particular transport carries them.
- Reference core types (`PaymentRequirements`, `PaymentPayload`, `SettlementResponse`) from [`x402-specification-v2.md`](../../../specs/x402-specification-v2.md).
- Every field a spec defines on the wire must be consumed by a downstream role. Do not include human-readable or otherwise purely informational fields.
- Reuse field names, patterns, and conventions established by existing specs instead of coining new ones.

## References

- New network scheme spec (`scheme_<name>_<chain>.md`): see [references/new-network-scheme-spec.md](references/new-network-scheme-spec.md).
- New extension spec: to be added.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# New network scheme spec

Checklist for authoring a new per-network scheme spec file (`scheme_<name>_<chain>.md`). Follow the [general spec rules](../SKILL.md) as well.

## Spec contents

- Scheme-specific information (e.g. in `PaymentRequired`) goes in `extra`, not in `extensions` or at the top level.
- Define any scheme-specific `extra` fields (optional/required, with description), and show them in `PaymentRequired`, `PaymentPayload`, and `SettlementResponse` messages or `supported/` examples.
- Every field placed in `PaymentRequired.extra` must be consumed by the client to construct the payment or by the facilitator to verify or settle it; do not include human-readable or otherwise purely informational fields.

## Compliance and conventions

- Comply with the network-agnostic scheme definition (e.g. `scheme_exact_<network>.md` complies with [`scheme_exact.md`](../../../../specs/schemes/exact/scheme_exact.md)).
- Reuse field names already established by existing schemes instead of coining new ones. For example, when the scheme must name the account that sponsors network fees (typically the facilitator), use `extra.feePayer` as in [`scheme_exact_svm.md`](../../../../specs/schemes/exact/scheme_exact_svm.md); when the scheme offers more than one payload format, use `extra.assetTransferMethod` to select among them as in [`scheme_exact_evm.md`](../../../../specs/schemes/exact/scheme_exact_evm.md).

## Fee sponsorship and infrastructure

- Fee sponsorship is strongly preferred; clients and servers should not need to pay gas or hold the native token.
- The server should not need an RPC; the client may use an RPC; a facilitator RPC can be considered a given.

## Statelessness

- Stateless design is strongly preferred for client and server, and especially the facilitator. A short-lived cache is acceptable but needs to be well justified (see the duplicate-settlement mitigation in [`scheme_exact_svm.md`](../../../../specs/schemes/exact/scheme_exact_svm.md#duplicate-settlement-mitigation-recommended)). Persistent storage warrants discussion with maintainers.

## Nonces

- Sequential nonces are strongly discouraged. They effectively lock the client account until the server route handler completes and the transaction settles, which may take several minutes (bounded only by `maxTimeoutSeconds`, on which the protocol enforces no upper limit). If the client submits another transaction from that account between verification and settlement, the nonce is consumed, settlement fails, and the work the server already performed is wasted.

## Verification and settlement

- Do not introduce new facilitator endpoints beyond `verify/`, `settle/`, and `supported/`. A scheme must express all facilitator interactions through these existing endpoints.
- Use transaction simulation, not only structural payload checks, to confirm the transaction would actually succeed onchain. If that is not possible, at least targeted checks of onchain state MUST be done (e.g. sufficient client token balance, nonce unconsumed).
- Verify should provide the strongest possible guarantee that settlement will succeed. If settle fails, the client does NOT get access to the resource; but if verify succeeded, the server did unnecessary work, wasting resources (compute). This is a server protection.
- The facilitator must confirm transaction success onchain before returning success to the server.
- The facilitator must protect its own funds and bound its fee exposure. Its signature must authorize only the network fee: the facilitator must not appear as the authority, source, or sender of any value-moving instruction (fee-payer isolation), so it cannot be induced to transfer its own funds. It must also cap the fees it pays against client-controlled parameters (e.g. explicit gas limits, compute-unit and priority-fee caps), so a client cannot inflate them.

## Trust model

- The client must treat all server-provided fields as untrusted and must not rely on a server value for anything it can determine authoritatively itself. For example, if a scheme placed token `decimals` in `extra` and the client trusted it, a misconfigured or malicious server could report a wrong value, causing the client to compute too large an atomic `amount` and overpay; the client must instead read `decimals` (and similar token metadata) from onchain state.
- The server and facilitator must consider the client payload untrusted.
- The client should never interact with the facilitator directly, always via the server as proxy.

## Account requirements

- Enumerate every account precondition that must hold before a payment can be verified and settled, naming the responsible role (client, server, or facilitator). Examples: a minimum native balance for rent or fees, an asset trustline or token association / opt-in, and account or associated-token-account creation.
91 changes: 91 additions & 0 deletions .agents/skills/contributing/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---
name: contributing
description: Guidelines and conventions for contributing to the x402 codebase. Use when preparing a PR to the upstream x402-foundation/x402 repository such as fixing a bug or Issue, implementing a new feature, adding a mechanism/scheme or extension.
---

# Contributing to x402

## Reuse before writing new code

- Before writing anything, check in order whether the standard library (TS: ECMAScript and Node.js built-ins like `node:crypto`; Python: the stdlib; Go: packages like `net/http`, `encoding/json`, `crypto`), a native platform feature, or an already-installed dependency already does it; if so, use it.
- Always reuse shared and core utilities.
- No new dependencies if it can be avoided.

## Keep changes minimal

- Address a single issue per contribution, not multiple.
- Targeted edits, minimal diff, atomic commits.
- No abstractions or boilerplate that were not explicitly requested.
- No edits to legacy/v1 code; it is effectively frozen (security patches only). This includes the paths `typescript/packages/legacy/`, `go/legacy`, `python/legacy` and the `java/` SDK.

## Code style

- Write clean, readable code (e.g. prefer guard clauses over nested conditionals, use descriptive names and small, single-purpose functions).
- Strong typing, avoid any weak types (`any`, `unknown`, and their equivalents in other languages). Research the codebase to find the correct type, reuse existing type definitions rather than redeclaring them and confirm no type errors remain.
- No overly defensive code or silent fallbacks.
- Apply DRY only where it reduces complexity; keep single-use logic inline rather than extracting a helper for it.

## Comments

- Write comments that help a new reader understand the codebase.
- Never narrate in-progress work or describe code being replaced.
- Write onchain - never "on-chain" or "on chain".
- Don't change/remove existing comments, unless strictly needed due to code changes.

## AI-assisted contributions

Follow the repository AI-assisted contribution policy in [CONTRIBUTING.md](../../../CONTRIBUTING.md#ai-assisted-contributions). Review all AI-generated output before requesting maintainer review.

## Working on an Issue

- Independently reproduce and verify the Issue first.
- When in doubt, ask clarifying questions on the Issue before writing code.

## Bug fixes

- Add a test that fails before the fix and passes after it.
- Don't write tests for what the type system already guarantees.
- Cover edge cases, not only happy path.

## Commits and PRs

- Verifying (signing) ALL commits is strictly required; maintainers will not check a PR otherwise. See [GitHub: about commit signature verification](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification).
- PR description: short and matching the diff; explain what and why; link relevant issues; state the root cause in one paragraph, citing file and line.
- Justify design decisions where there were ambiguities and discuss the tradeoffs of the approach you picked against the alternatives you considered.

## Per-language

### Per commit: format, lint, build, test

Format, lint, build, and run unit tests before each commit.

```bash
# TypeScript (from typescript/)
pnpm format && pnpm lint && pnpm build && pnpm test

# Go (from go/)
make fmt && make lint && make build && make test

# Python (from python/x402/)
uvx ruff format && uvx ruff check && uv run pytest
```

### Per PR: changelog

Add a changelog fragment for the SDK you changed.

```bash
# TypeScript (from typescript/)
pnpm changeset

# Go (from go/)
make changelog-new

# Python (from python/x402/)
uv run towncrier create --content "Fixed ..." <PR>.bugfix.md
```

## New mechanism or extension

- New payment mechanism / scheme: see [references/new-mechanism.md](references/new-mechanism.md).
- New extension: see [references/new-extension.md](references/new-extension.md).
61 changes: 61 additions & 0 deletions .agents/skills/contributing/references/new-extension.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# New extension implementation

Checklist for adding a new extension. Follow the [general contributing rules](../SKILL.md) as well.

## Spec first

- A spec file must exist. If it does not, write it first.
- The spec must be approved by maintainers (merged into upstream `main`). If it is not, open a PR with the spec only first (`specs/extensions/...`).
- The implementation must follow the spec file exactly.
- The wire formats `PAYMENT-REQUIRED` (in particular the extension field), `PAYMENT-RESPONSE` and facilitator `supported/` output must match the spec strictly. Include only fields actually consumed downstream or required by the extension. Don't add purely informational fields.
- Spec amendments and edits are allowed, but must be well justified.

## Scope

- One language per PR. Never implement the extension in more than one SDK (TS, Python, Go) in a single PR.
- Implement v2 only. Common v1 tells (see the [V1→V2 migration guide](../../../../docs/guides/migration-v1-to-v2.mdx)): `maxAmount` in payment requirements, `X-PAYMENT`/`X-PAYMENT-RESPONSE` headers (v2 uses `PAYMENT-SIGNATURE`/`PAYMENT-RESPONSE`), string network names like `base-sepolia` (v2 uses CAIP-2 like `eip155:84532`) or `x402Version: 1`.

## Code patterns

- Wire extensions with lifecycle hooks via the extension-hooks adapter pattern.
- Reuse core and extension utilities instead of reimplementing them.
- Do NOT modify other packages (core, http, ...). If this is deemed necessary, discuss with maintainers first.

## Tests

### Unit tests

- Pure-logic tests that run offline. Add them under **TS** `typescript/packages/extensions/test/`; **Go** `go/extensions/<extension>/`; or **Py** `python/x402/tests/unit/extensions/<extension>/`. Run them and confirm all pass.
- New additions must have **>80%** line coverage.

```bash
# from typescript/
pnpm --filter @x402/extensions test
# go/
make test
# python/x402/
uv run pytest tests/unit/extensions/
```

### Integration tests

- In-process client/server/facilitator flow tests within the SDK. Requires funded testnet accounts.
- Add them under **TS** `typescript/packages/extensions/test/integrations/`; **Go** `go/extensions/<extension>/`; or **Py** `python/x402/tests/integrations/`. Suites skip when required env vars are missing.
- Run them and confirm all pass.

```bash
# from typescript/
pnpm --filter @x402/extensions test:integration
# go/
make test-integration
# python/x402/
uv run pytest tests/integrations/
```

## Examples

Add server, client, and facilitator examples (as appropriate). Manually confirm a successful payment by running facilitator server and client examples locally.

## Docs

- Add READMEs for the SDK and all examples.
86 changes: 86 additions & 0 deletions .agents/skills/contributing/references/new-mechanism.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# New mechanism implementation

Checklist for adding a new payment mechanism / scheme. Follow the [general contributing rules](../SKILL.md) as well.

## Spec first

- A spec file must exist. If it does not, write it first.
- The spec must be approved by maintainers (merged into upstream `main`). If it is not, open a PR with the spec only first (`specs/schemes/...`).
- The implementation must follow the spec file exactly. Facilitator verification rules are security-critical.
- The wire formats `PAYMENT-REQUIRED` (in particular the `extra` field), `PAYMENT-RESPONSE` and facilitator `supported/` output must match the spec strictly. Include only fields actually consumed downstream or required by the scheme. Don't add purely informational fields.
- Spec amendments and edits are allowed, but must be well justified.

## Scope

- One language per PR. Never implement the mechanism in more than one SDK (TypeScript, Python, Go) in a single PR.
- If a reference implementation already exists in another SDK, cross-check against it; otherwise yours is the reference and the spec is the only source of truth.
- Implement v2 only. Common v1 tells (see the [V1→V2 migration guide](../../../../docs/guides/migration-v1-to-v2.mdx)): `maxAmount` in payment requirements, `X-PAYMENT`/`X-PAYMENT-RESPONSE` headers (v2 uses `PAYMENT-SIGNATURE`/`PAYMENT-RESPONSE`), string network names like `base-sepolia` (v2 uses CAIP-2 like `eip155:84532`) or `x402Version: 1`.

## Code patterns

- Wire schemes with the builder pattern, not `register*` helpers. A new v2-only mechanism registers its scheme under the family wildcard: `client.register("<family>:*", new Exact<Chain>Scheme(...))` (and the same on `x402ResourceServer`). Do NOT implement a `registerExact<Chain>Scheme` helper. Those exist only in the EVM/SVM mechanisms to also register the legacy v1 schemes for backward compat.
- Reuse core utilities instead of reimplementing them. For example, import `convertToTokenAmount`, `numberToDecimalString`, and `parseMoney` from `@x402/core/utils` for TS or similar for Go/python SDKs.
- If the mechanism supports `$` string pricing, add `defaultAssets.ts` / `default_assets.go` / `default_assets.py` with `DEFAULT_ASSETS`, `getDefaultAsset`/`GetDefaultAsset`/`get_default_asset`, and `findDefaultAsset`/`FindDefaultAsset`/`find_default_asset` (see [DEFAULT_ASSETS.md](../../../../DEFAULT_ASSETS.md)). Expose the reverse lookup on the client scheme so `@x402/core` spend controls recognize USD-pegged defaults. Chains without a canonical USD stablecoin may omit the file and require explicit `AssetAmount` pricing instead. Do not put default assets in `constants` or bundled network-config maps.
- Do NOT modify other packages (core, http, ...). If this is deemed necessary, discuss with maintainers first.

## Tests

### Unit tests

- Pure-logic tests that run offline with no live RPC or network calls. Add them with comparable coverage to the EVM reference under **TS** `typescript/packages/mechanisms/<chain>/test/unit/`; **Go** `go/mechanisms/<chain>/` or **Py** `python/x402/tests/unit/mechanisms/<chain>/`. Run them and confirm all pass.
- New additions must have **>80%** line coverage.

```bash
# typescript/
pnpm --filter @x402/<chain> test
# go/
make test
# python/x402/
uv run pytest
```

### Integration tests

- In-process client/server/facilitator flow tests within the SDK that exercise real RPC endpoints and may submit onchain transactions. Requires funded testnet accounts.
- Add them with comparable coverage to the EVM reference under **TS** `typescript/packages/mechanisms/<chain>/test/integrations/` (see `exact-evm.test.ts`); **Go** `go/test/integration/`; **Py** `python/x402/tests/integrations/`. Suites skip when required env vars are missing.
- Run them and confirm all pass.

```bash
# typescript/
pnpm --filter @x402/<chain> test:integration
# go/
make test-integration
# python/x402/
uv run pytest tests/integrations/
```

### E2E tests

- The `e2e/` harness runs client × server × facilitator combinations from the mechanisms catalog. Requires funded testnet accounts.
- Add `e2e/config/mechanisms_<id>.json` (`env`, `testnet`/`mainnet`, `routes` with `sdks`). Do **not** edit per-framework route lists or CAIP-2 pattern tables — HTTP/MCP endpoints are derived from the catalog.
- Register the scheme once per language in the shared modules only: `e2e/servers/<lang>/`, `e2e/clients/<lang>/`, `e2e/facilitators/<lang>/`.
- Add wallet/payee placeholders to `e2e/.env-local`.
- Run them and confirm all pass.

```bash
# from e2e/
pnpm install:all && pnpm test --testnet --min --families=<chain> --versions=2
```

## Examples

- Add network to server, client and facilitator examples under `examples/<sdk>/*/advanced/all_networks`.
- Manually confirm a successful payment by running facilitator, server and client examples locally.

## Docs

- Add READMEs for the SDK and all examples.
- Include link to a testnet faucet and detail all necessecary setup steps (e.g. token association/opt-ins or minimum balance requirements).

## Publishing scripts

Mirror the EVM setup per SDK:

- **TS**: Add `publish_npm_scoped_x402_<chain>.yml` workflow and add package to `publish_npm_scoped_x402_all.yml`.
- **Py**: Add an optional extra in `python/x402/pyproject.toml`; uses existing `publish_pypi_x402.yml`.
- **Go**: no new workflow required; ships with the `go/` module.
5 changes: 5 additions & 0 deletions .gitbook.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
root: ./docs/

structure:
readme: README.md
summary: SUMMARY.md
Loading