Skip to main content
The release notes for the Privy Python SDK. Refer to the package releases for additional details.
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.
  • Python 3.8 is no longer supported. Upgrade to Python 3.9 or later.
  • Use PrivyClient for the new synchronous interface. No asynchronous equivalent of PrivyClient is currently available.
  • Wallet authorization has been redesigned. The authorization_key client option and update_authorization_key() method have been removed. Pass credentials per request with PrivyRequestOptions and AuthorizationContext, which support authorization private keys, signer callbacks, precomputed signatures, and user JWTs.
  • Several mutation signatures have changed. For example, wallet update and rpc calls on PrivyClient now accept wallet_update_params and wallet_rpc_request_body dictionaries.
  • wallets.generate_user_signer() has been removed. Use AuthorizationContext(user_jwts=[...]) for JWT-authorized mutations instead.
  • The privy.lib.stablecoins USDC, 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 to users.get_by_custom_auth_id(custom_user_id=...). users.create_custom_metadata() has been renamed to users.set_custom_metadata() and now returns the updated User.
  • Policy, key quorum, and wallet mutations made through PrivyClient now 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 return SuccessResponse. Update direct imports of nested response classes and any response subclass checks.
  • User.created_at is now expressed in seconds instead of milliseconds. The has_accepted_terms and mfa_methods response fields are also no longer optional.
  • pyjwt and web3 are no longer installed as transitive dependencies. Applications that use them directly must declare them explicitly.