Skip to main content
The release notes for the Privy Python SDK. Refer to the package releases for additional details.

Added

  • Add authorized wallet transfer helpers.
  • Add authorized wallet swap helpers.
  • Add authorized Ethereum earn helpers.
  • Add HPKE-backed wallet import and export helpers.
  • Add Privy token verification with cached JWKS discovery.
  • Add signed webhook payload verification.
  • API updates.

Fixed

  • Default user_can_sign to true when parsing identity tokens.

Dependencies

  • Add svix (>=1.56.0,<1.57) as a runtime dependency.

Breaking changes

  • Renamed UsageCrossChainFeeRecordedWebhookPayload to UsageSwapProviderFeeRecordedWebhookPayload. The event type changed from usage.cross_chain_fee.recorded to usage.swap_provider_fee.recorded.
  • Removed the "triggered" value from WalletAutomationExecutionStatus. Use "submitted" instead.
  • RawSignBytesParams, RawSignHashParams, and RawSignInputParams are now response models. Use RawSignBytesParamsParam, RawSignHashParamsParam, and RawSignInputParamsParam for wallets.raw_sign(params=...).
  • intents.list(intent_type=...) is now typed as IntentTypeParam instead of IntentType.
  • user_can_sign is now a required bool on the LinkedAccount*EmbeddedWallet models.
  • PrivyUsersService now requires an auth argument. This only affects code that constructs the service directly instead of using PrivyClient.
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.