- Added optional EIP-8021 dataSuffix to send_user_operation (#506)
- Added createEndUser method to EndUser client (#499)
- Replaced error-tracking wrappers with a WeakSet-based recursion guard to prevent memory leaks from strong references to wrapped instances. (#494)
- Removed default audience claim from JWT generation
- Added netUSDChange policy criteria to send+prepareUserOperation (#440)
- Fixed uvloop compatibility issue (#448)
- Added programId, solNetwork, and solMessage policy criteria (#435)
- Support non-checksum addresses in transfers.
- Removed approval in transfer method for Smart Accounts and EOAs (#427)
- Added solData criterion to policy engine (#415)
- Added check to validate smart account owner (#411)
- Added access token validation to SDK (#389)
- Migrated listTokenBalances to use new data endpoint with significantly improved performance: <1sec data freshness, <500ms query latency, and 100% token balance completeness across all addresses on Base and Base Sepolia networks (#394)
- Added additional network support for sendEvmTransaction and prepareUserOperation evmNetwork policy criteria (#1446)
- Added discovery layer disclaimer notice to x402 subpackage
- Promoted Spend Permissions out of experimental mode. For more info, see: https://docs.cdp.coinbase.com/wallet-api/v2/evm-features/spend-permissions (#376)
- Added netUSDChange criteria for sign/sendEvmTransaction rules (#1218)
- Added SendSolTransaction rule and updated SignSolTransaction rule with new criteria (#344)
- SendEvmTransaction support for new EVM networks - arbitrum, polygon, optimism, avalanche (#338)
- Fixed evmData in python request/response transformer (#317)
- Added Solana onramp (#294)
- Updated transfer to use SendSolanaTransaction (#309)
- Gracefully handle closed client connections (#298)
- Added signTypedData on EvmSmartAccount (#284)
- Made solana mainnet default network for listTokenBalances (#282)
- Added list_token_balances on Solana to get SOL and SPL token balances (#277)
- Added updateSmartAccount to EvmClient (#267)
- Added sendUserOperation, prepareUserOperation policy rules and EVM Smart Account policies (#270)
- Added support for policy creation on signTypedData operations (#264)
- Added ethereum mainnet support for wallet fund and quote_fund operations (#251)
- Added importAccount method for Solana client (#244)
-
Fixed EvmLocalAccount sign typed data compatibility with eth-account.
- Convert bytes32 to hex string to make it serializable
- Include EIP712 domain if missing from types
- Return SignedMessage
(#246)
- Added ethereum & ethereum-sepolia to SendEvmTransaction (#234)
- Added support for EvmDataCriterion in policies, which can restrict smart contract interactions (#220)
- Hash req body in wallet jwt claims (#212)
- Added the CDP facilitator configuration export for the x402 payment protocol
-
Added swap support for EVM Smart Accounts (#200):
- Added the following EVM Smart Account methods:
evm_smart_account.quote_swap(),evm_smart_account.swap() - Added
swap_quote.execute()method for executing swap quotes generated for EVM Smart Accounts
- Added the following EVM Smart Account methods:
-
Added idempotency support for get_swap_price and create_swap_quote (#200)
- Fixed usage of optional idempotency keys for one-line swap approach (#200)
- Added get_or_create_smart_account and added optional name argument to get_smart_account and create_smart_account (#198)
- Added evm and solana account export by address or name (#195)
- Log response body for unexpected error scenarios (#192)
-
Fixed taker parameter logic to align Python SDK with TypeScript SDK behavior:
- Removed
takerparameter fromSwapOptions- Account swap methods now always use the account address as taker, preventing confusion about which address receives the swapped tokens - Updated
account.swap()- Always usesself.addressas taker instead of allowing custom taker via SwapOptions - Updated
account.quote_swap()- Always usesself.addressas taker (previously could be overridden) - Maintained explicit
takerrequirement - Global methods (cdp.evm.get_swap_price(),cdp.evm.create_swap_quote()) still require explicit taker parameter for flexibility - Updated examples and documentation - All examples now reflect the simplified taker logic
This change provides a cleaner API where account-level convenience methods always swap to the account address, while global methods require explicit specification for external wallet integrations.
(#182)
- Removed
-
Added comprehensive token swap functionality for EVM accounts
- Added multiple swap approaches:
- Direct swap with
account.swap()usingSwapOptionswith parameters - Get pricing information with
get_swap_price() - Create quotes with
create_swap_quote()and execute separately - Account convenience method
account.quote_swap()that auto-sets taker
- Direct swap with
- Added ability to execute quotes directly with
quote.execute()whenfrom_accountis provided - Support for swapping tokens using contract addresses
- Configurable slippage protection (slippage_bps) with automatic optimal routing
- Returns
SwapUnavailableResultwhen liquidity is insufficient - Consistent parameter naming:
from_token,to_token,from_amount - Support for multiple amount formats (decimal strings and atomic units)
- Comprehensive test coverage including unit tests and E2E tests
- Updated documentation with examples for all swap patterns
(#160)
- Added multiple swap approaches:
-
Added support for signEvmHash and signEvmMessage policy rules (#173)
- Added support for funding an EVM account with eth or usdc using a linked debit card (#156)
- Added eth-account compatibility (#162)
- Added ability to create account with policy (#166)
- Added import account to evm client (#157)
- Added transfer method to Solana account to easily send tokens on Solana (#136)
- Updated Transfer API to allow users to wait for receipt and pass in a parsed amount to transfer (#137)
- Added support for eip-712 signing (#132)
- Added SolanaAccount with convenience methods to easily perform actions on a returned account (#135)
-
Added additional options to transfer methods (#105):
- Added
paymaster_urlandwait_optionsto EvmSmartAccount.transfer - Added
wait_optionsto EvmAccount.transfer
- Added
-
Added account actions for evm server and smart accounts (#114)
- Added transfer methods to EvmAccount and EvmSmartAccount (#95)
- Added a get_or_create_account function to the EVM and Solana clients (#98)
- Updated send_transaction to allow omission of nonce and gas parameters, deferring to Coinbase API to fill these in (#86)
- Added the ability to generate JWTs intended for Websocket connections
- Added the ability to pass "audience" JWT claim as an optional param (#75)
- Fix circular dependency when importing cdp-sdk (#82)
- This patch contains a README update to accomodate the new home for CDP SDK examples.
- Added list_token_balances to the evm client to retrieve ERC-20 and native token balances for an address on a given network. (#55)
- Added send_transaction to the evm client to sign and send a transaction on a given network. (#58)
- Correctly implement aenter and aexit on CdpClient (#43)
-
Add support for configuring
CdpClientvia environment variables. (#30)Developers can now simply set the following environment variables in their shell:
export CDP_API_KEY_ID=your-api-key-id export CDP_API_KEY_SECRET=your-api-key-secret export CDP_WALLET_SECRET=your-wallet-secret
And configure the
CdpClientlike so:from cdp import CdpClient cdp = CdpClient()
Or, load from a
.envfile:# .env CDP_API_KEY_ID=your-api-key-id CDP_API_KEY_SECRET=your-api-key-secret CDP_WALLET_SECRET=your-wallet-secretAnd configure the
CdpClientlike so:from cdp import CdpClient from dotenv import load_dotenv load_dotenv() cdp = CdpClient()
- Initial release of the CDP SDK.