Initial release of the new Python SDK. This is a full rewrite of our Python SDK, so breaking changes are expected.
See the quickstart guide for details on how to get started.
Breaking changes when upgrading from unmaintained version 0.6.0 or earlier
Breaking changes when upgrading from unmaintained version 0.6.0 or earlier
- Python 3.8 is no longer supported. Upgrade to Python 3.9 or later.
- Use
PrivyClientfor the new synchronous interface. No asynchronous equivalent ofPrivyClientis currently available. - Wallet authorization has been redesigned. The
authorization_keyclient option andupdate_authorization_key()method have been removed. Pass credentials per request withPrivyRequestOptionsandAuthorizationContext, which support authorization private keys, signer callbacks, precomputed signatures, and user JWTs. - Several mutation signatures have changed. For example, wallet
updateandrpccalls onPrivyClientnow acceptwallet_update_paramsandwallet_rpc_request_bodydictionaries. wallets.generate_user_signer()has been removed. UseAuthorizationContext(user_jwts=[...])for JWT-authorized mutations instead.- The
privy.lib.stablecoinsUSDC, ERC-20, and constants modules have been removed. Use the newer wallet transfer and swap APIs or application-level utilities instead. users.get_by_jwt_subject_id()has been renamed tousers.get_by_custom_auth_id(custom_user_id=...).users.create_custom_metadata()has been renamed tousers.set_custom_metadata()and now returns the updatedUser.- Policy, key quorum, and wallet mutations made through
PrivyClientnow sign requests and apply expiration timestamps. The default expiration is 15 minutes for most requests and 72 hours for intents. Custom signing implementations must include expiration and idempotency headers in the signed payload. - Response models have changed substantially. RPC variants now use dedicated types, transaction lookup returns
Transaction, and policy and key quorum deletion returnSuccessResponse. Update direct imports of nested response classes and any response subclass checks. User.created_atis now expressed in seconds instead of milliseconds. Thehas_accepted_termsandmfa_methodsresponse fields are also no longer optional.pyjwtandweb3are no longer installed as transitive dependencies. Applications that use them directly must declare them explicitly.

