Commit 30a847d
feat: New Python SDK with v2 support (#841)
* chore: renamed python/x402 to python/legacy
* feat: initial Python core SDK
* feat: added core HTTP wrappers
* feat: added core types
* feat: added evm mechanism for exact v1/v2
* feat: added httpx client
* feat: added requests client
* feat: added fastapi middleware
* feat: added flask middleware
* feat: added integration tests
* feat: added Python SDK to e2e tests
* python-v2: fix workflow checks (#863)
* fix format
* fix lint
* fix build
* fix pytest
* Fix syntax errors and missing imports in manual integration example (#902)
- Add missing imports (base64, json, Response, JSONResponse, PaymentPayload, FacilitatorClient)
- Fix function signature syntax error
- Fix dict initialization syntax (colon to equals)
- Add missing return statement after successful payment
- Remove trailing whitespace
* feat: add Python SDK v2 server examples (FastAPI, Flask) (#879)
* feat: add fastapi example project configuration
* feat: add fastapi example with x402 payment middleware
* docs: add comprehensive README for fastapi example
* feat: add flask example project configuration
* feat: add flask example with x402 payment middleware
* docs: add comprehensive README for flask example
* feat: add test clients for fastapi and flask examples
* docs: add test client usage to READMEs
* chore - remove python-version and test-client.py
* docs - remove test client guide from README.md
* chore - remove license and classifier
* feat - add description and mime type
* feat - update .env-local
* feat: add Python v2 client examples (httpx & requests) (#857)
* feat: add Python v2 client examples (httpx & requests)
Add simple client examples demonstrating httpx (async) and requests (sync) usage with the x402 Python v2 SDK.
- examples/python/clients/example.py - Simple example showing both httpx and requests
- Uses EthAccountSigner with register_exact_evm_client helper
- Minimal configuration required
* refactor: split Python client examples into separate directories
Address PR review feedback:
- Separate httpx/ and requests/ directories
- Add pyproject.toml for uv sync support
- Add environment variable validation
- Add payment response header extraction
- Use context manager for requests session cleanup
Tested on Base Sepolia testnet:
- httpx: tx 0xce49f668aba01c4b0b1af2eb0d9a381f4c62295506a91f20af479e0e834ef350
- requests: tx 0xb83b6feefa5a744b7779ba5b37df33f9c7241f58119454d66102acd97a92f024
* Update examples/python/clients/httpx/main.py
Co-authored-by: phdargen <[email protected]>
* Update examples/python/clients/requests/main.py
Co-authored-by: phdargen <[email protected]>
---------
Co-authored-by: phdargen <[email protected]>
* feat(python): Make v2 framework and client dependencies optional extras (#901)
* python-v2: add svm mechanism (#904)
* add svm mechanism
* add unit tests
* add integration tests
* update server examples
* add e2e tests
* update clients
* make EVM/SVM dependencies optional extras
* fix legacy uv paths
* V2 python bazaar (#929)
* add bazaar extension
* strip query params for discovery
* fix 862
* updated e2e tests
* Add advanced Python client examples (#947)
* Add advanced Python client examples
Implements 5 advanced patterns demonstrating x402 SDK v2 features:
- hooks.py: Payment lifecycle hooks (before, after, failure)
- preferred_network.py: Custom network preference selector
- builder_pattern.py: Network-specific registration with wildcards
- error_recovery.py: Error classification and recovery strategies
- custom_transport.py: Custom httpx transport with retry/timing
Includes:
- CLI entry point (index.py) for running examples
- Comprehensive test suite (40 unit tests)
- E2E integration tests
- README documentation
All tests passing.
* Remove tests and examples beyond TypeScript SDK parity
Address PR review feedback:
- Remove tests directory (tests belong in SDK, not examples)
- Remove custom_transport.py (runtime error, beyond TS parity)
- Remove error_recovery.py (duplicate of hooks.py, beyond TS parity)
- Update index.py, README.md, pyproject.toml accordingly
* Address PR feedback: add SVM support and use optional deps
- Update pyproject.toml to use x402[evm,svm,httpx] instead of
listing dependencies separately
- Add Solana/SVM network examples to preferred_network.py
- Support both EVM and SVM signers for cross-chain flexibility
- Update .env-local with SOLANA_PRIVATE_KEY option
* Python-v2: facilitator example + e2e (#950)
* add facilitator example
* improve svm signer
* add description to DiscoveredResource
* add facilitator e2e
* add paywall builder (#953)
* Add Python custom client example (#954)
Demonstrates manual x402 v2 payment flow without convenience wrappers.
Shows the 6-step process:
1. Initialize client and register payment schemes
2. Make initial request, receive 402
3. Decode PAYMENT-REQUIRED header
4. Create signed payment payload
5. Retry with PAYMENT-SIGNATURE header
6. Handle success/failure response
Useful for integrating with non-standard HTTP libraries or implementing
custom retry logic.
* feat(v2-sdk): support async dynamic hooks for price and metadata (#900)
* feat(http): implement dual class design for sync/async support
- Add x402HTTPResourceServer (async) for FastAPI/Starlette
- Add x402HTTPResourceServerSync (sync) for Flask/Django
- Share common logic via _x402HTTPServerBase
- Remove dynamic description/resource (keep only dynamic price/payTo)
- Update Flask middleware to use sync server directly
- Integrate with enrich_extensions for bazaar support
- Add per-route hook_timeout_seconds configuration
Co-Authored-By: Claude Opus 4.5 <[email protected]>
* fix(types): add missing Awaitable import and fix test import sorting
- Add Awaitable import to types.py for DynamicPayTo/DynamicPrice type hints
- Fix import block sorting in test_async_hooks.py and test_core.py
Co-Authored-By: Claude Opus 4.5 <[email protected]>
* refactor: simplify API by removing unused types and making timeout opt-in
Address reviewer feedback from @phdargen:
- Remove SyncDynamicPayTo/SyncDynamicPrice (unused types that would require SyncPaymentOption to be useful)
- Change hook_timeout_seconds default to None (opt-in, matching TS/Go parity)
- Export x402HTTPResourceServerSync from http/__init__.py
Co-Authored-By: Claude Opus 4.5 <[email protected]>
---------
Co-authored-by: Claude Opus 4.5 <[email protected]>
* python-v2: make create_facilitator_config work with both V1 and V2 (#968)
* make create_facilitator_config work with both V1 and V2
* fix lint
* feat: add Python SDK v2 server advanced example (FastAPI) (#952)
* feat - add pyproject.toml, uv.lock for advanced example
* feat - add bazaar extension
* feat - add hooks
* feat - add x402 extensions to pyproject.toml
* feat - add dynamic pricing feature
* feat - add dynamic pay-to and custom money parser features
* docs - add README for advanced server example
* style - apply lint
* chore - add comments for bazaar extension code
* fix: python v2 x402HTTPAdapter retry logic (#978)
* fix: fix consecutive payment bug in x402HTTPAdapter
- Replace instance-level _is_retry flag with per-request header
to prevent state leakage between consecutive 402 requests.
* tests - add test case for consecutive payment with x402HTTPAdapter
* style - apply lint
* Python-v2: async lifecycle hooks (#975)
* add dual sync/async classes for server/client/facilitator
* update integration/e2e tests
* add unit tests for core, http and implement wrapHttpxWithPaymentFromConfig/wrapRequestsWithPayment
* refactor core server/client/facilitator
* refactor x402_http_server/facilitator_client/x402_http_client
* update exmamples
* add utility function that takes care of html-safe escaping
* add sdk readmes
* add retry unit tests to httpx client
* Update Python SDK Docs for v2 (#976)
* Porting docs and updating for v2 changes (#813)
* porting docs and updating for v2 changes
* update quickstart for sellers
* update quickstarts, miniapps, and mcp docs
* update doc links
* update FAQs
* fix getting started docs
* update core concepts
* remove miniapps guide
* update extensions
* fix bazaar code examples
* fix broken links and yaml file
* remove unnecessary protocol layer doc
* add migration guide
* update documentation for python v2 sdk
* testing pr preview
* docs(python): remove unused os imports and align with TS tab patterns
- Remove unused 'import os' from FastAPI and Flask examples in quickstart-for-sellers
- Update bazaar-discovery-layer Python example to use hardcoded '0xYourPrivateKey' to match TypeScript tab consistency
* update migration doc
* cleanup comments
* cleanup readme
* fix: Python facilitator e2e code
* fix: lint
---------
Co-authored-by: phdargen <[email protected]>
Co-authored-by: somesome <[email protected]>
Co-authored-by: Logan Kang <[email protected]>
Co-authored-by: 1bcMax <[email protected]>
Co-authored-by: phdargen <[email protected]>
Co-authored-by: Vladimir Sotnikov <[email protected]>
Co-authored-by: Shuhei <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
Co-authored-by: Faris Habib <[email protected]>1 parent fb6527d commit 30a847d
File tree
311 files changed
+75794
-2213
lines changed- .github/workflows
- docs
- core-concepts
- getting-started
- guides
- e2e
- clients
- httpx
- requests
- facilitators/python
- legacy
- clients
- httpx
- requests
- servers
- fastapi
- flask
- servers
- fastapi
- flask
- examples/python
- clients
- advanced
- custom
- httpx
- requests
- facilitator
- legacy
- clients
- httpx
- requests
- discovery
- fullstack
- fastapi
- flask
- servers
- advanced
- fastapi
- flask
- mainnet
- servers
- advanced
- custom
- fastapi
- flask
- go
- extensions/bazaar
- http
- gin
- mechanisms/evm/exact
- facilitator
- v1/facilitator
- python
- legacy
- src/x402
- clients
- fastapi
- flask
- tests
- clients
- fastapi_tests
- flask_tests
- x402
- extensions
- bazaar
- v1
- http
- clients
- middleware
- paywall
- mechanisms
- evm
- exact
- v1
- svm
- exact
- v1
- schemas
- src/x402
- tests
- integrations
- mocks
- unit
- core
- extensions
- bazaar
- http
- clients
- middleware
- mechanisms
- evm
- svm
- typescript/packages/http/paywall/src
- evm
- svm
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
311 files changed
+75794
-2213
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
| 26 | + | |
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
92 | | - | |
93 | 92 | | |
94 | 93 | | |
95 | 94 | | |
96 | 95 | | |
97 | 96 | | |
98 | | - | |
99 | 97 | | |
100 | 98 | | |
101 | | - | |
102 | | - | |
103 | | - | |
| 99 | + | |
104 | 100 | | |
105 | 101 | | |
106 | 102 | | |
| |||
115 | 111 | | |
116 | 112 | | |
117 | 113 | | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
| 114 | + | |
122 | 115 | | |
123 | | - | |
124 | | - | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
125 | 119 | | |
126 | | - | |
| 120 | + | |
127 | 121 | | |
128 | | - | |
| 122 | + | |
129 | 123 | | |
130 | 124 | | |
131 | 125 | | |
132 | 126 | | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
140 | 134 | | |
141 | 135 | | |
142 | 136 | | |
| |||
185 | 179 | | |
186 | 180 | | |
187 | 181 | | |
188 | | - | |
| 182 | + | |
| 183 | + | |
189 | 184 | | |
190 | 185 | | |
191 | | - | |
192 | | - | |
193 | | - | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
194 | 190 | | |
195 | | - | |
196 | | - | |
197 | 191 | | |
198 | | - | |
199 | | - | |
200 | | - | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
201 | 196 | | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
208 | 213 | | |
209 | | - | |
| 214 | + | |
| 215 | + | |
210 | 216 | | |
211 | 217 | | |
212 | 218 | | |
| |||
272 | 278 | | |
273 | 279 | | |
274 | 280 | | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
292 | | - | |
293 | | - | |
294 | | - | |
295 | | - | |
296 | | - | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
305 | 322 | | |
306 | 323 | | |
307 | | - | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
308 | 333 | | |
309 | 334 | | |
310 | | - | |
311 | | - | |
312 | | - | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
313 | 339 | | |
314 | 340 | | |
315 | 341 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
195 | 227 | | |
196 | 228 | | |
197 | 229 | | |
| |||
0 commit comments