- Added
cdp.lend.list_vaultsandcdp.lend.get_vaultto read the Lend vaults a project created, including their APY and TVL metrics. Also added the generatedLendApi.list_vaultsandLendApi.get_vaultclient methods.
- Added
pause_policyandresume_policytoPoliciesClientto pause a policy indefinitely or until a time within the next 30 days, and addedstatus,paused_at, andresume_attoPolicy. - Added
redeem_vault_feestoEvmServerAccountandEvmSmartAccountto redeem the vault fee shares held by a Lend vault's fee recipient account for the vault's underlying asset. Also added the generatedLendApiclient (redeem_vault_fees_with_evm_account,redeem_vault_fees_with_evm_smart_account).
- Added
cdp.policies.simulateto evaluate policies against an operation without signing or submitting it. Returns aPolicySimulationResultwith theacceptorrejectaction, matched rule, and unmatched rules. (#policies-simulate) - Regenerate OpenAPI clients from
c3/cdp-api@3312048b: addsimulatePolicies(POST /v2/policy-engine/simulate) andcreateTopUpLink, add top-up-link and customer-requirement webhook schemas, update disbursementcustomerDisplay, and removelistCoinbaseAccountBalances. (#cdp-api-3312048b)
- Revoke delegation now calls
POST .../delegation/revokeandPOST .../address/{address}/delegation/revoke. The oldDELETEendpoints remain asrevokeDelegationForEndUserDeprecatedandrevokeDelegationForEndUserAccountDeprecateduntil 2026-10-22. The generated request body type for all four operations is nowRevokeDelegationRequest. Also adds the Mandates API (createMandate,getMandate,listMandates,cancelMandate,approveWalletMandate,revokeWalletMandate,authorizeMandatePaymentSession, and related approval and revocation reads) from the cdp-api master spec. (#cdp-api-6c7beea6)
-
Regenerate the OpenAPI client from the latest CDP API spec, adding customer-requirements and borrowing operations, Solana encoding options, and updated policy documentation.
Webhook subscription create/update metadata values now validate as 1–50 characters instead of 0–500. Requests with empty values or values longer than 50 characters must be updated. The API contract also specifies 1–50 characters for keys and at most 10 pairs. (CDP API spec a308e789)
-
Fixed the Python swap quote to surface API issues (allowance, balance, simulationIncomplete) on
QuoteSwapResult, and madesend_swap_transaction/send_swap_operationfail closed on allowance and balance issues before broadcasting a swap.simulationIncompleteis deliberately not blocking since, per the API docs, it does not necessarily mean the trade will revert. (#97)
- Fixed swap quote response deserialization when the API returns a boolean
liquidityAvailablevalue. (#788)
- Added support for calling public OpenAPI endpoints without API credentials and reporting missing credentials for authenticated endpoints at request time. (#745)
- Fixed swap quote response deserialization when the API returns nullable
gasFee,protocolFee, allowance, balance, gas, orpermit2values. (#780)
- Added paymasterContext and expiresAt for UserOperation methods (#730)
- Added SendEndUserOperationRule for the sendEndUserOperation operation, supporting ethValue, evmAddress, evmNetwork, evmData, and netUSDChange criteria. (#send-end-user-operation-rule)
- Added SignEndUserEvmHashRule for the signEndUserEvmHash operation. (#sign-end-user-evm-hash-rule)
- Added idempotency_key parameter to all end user client and account operation methods for safe request retries. (#713)
- Add missing
/embedded-wallet-api/path check to wallet auth header generation, ensuring X-Wallet-Auth is sent for all embedded wallet API operations (#fix-wallet-auth-embedded-wallet-api)
- Bumped API spec and re-generated clients (#700)
- Add support for SendEndUserEvmAsset, SendEndUserSolAsset, and CreateEndUserEvmSwap policy rules and criteria (#publicize-end-user-policy-rules)
- Added account-scoped delegation methods to EndUserAccount: get_delegation_for_account and revoke_delegation_for_account (#689)
- Add get_delegation method to EndUserClient for retrieving active delegation details (#get-delegation)
- Added new webhook events for signing and delegated signing (#671)
- Added delegated signing and sending methods to EndUserClient and EndUserAccount for EVM and Solana operations (#663)
- Removed upper bound pin on web3.py dependency (#657)
- Added CreateSubscription for Webhooks Client (#634)
- Removed nest_asyncio dependency (#652)
- Added solana fee sponsorship (#646)
- Added EIP-6492 signature wrapping for undeployed smart accounts (#623)
- Added createEvmEip7702Delegation to upgrade EOAs with smart account capabilities (#606)
- Added support for new end user embedded wallet policy rules, reusing existing criteria - signEndUserEvmTransaction, sendEndUserEvmTransaction, signEndUserEvmMessage, signEndUserEvmTypedData, signEndUserSolTransaction, sendEndUserSolTransaction, and signEndUserSolMessage. (#608)
- Added get_evm_eip7702_delegation_operation_by_id and wait_for_evm_eip7702_delegation_operation_status methods (#612)
- Fixed a bug where concurrent async method calls on the same object were short-circuited by the analytics error tracking wrapper, causing only the first call to execute and subsequent calls to return the input parameters instead of the actual result. (#fix-concurrent-analytics-wrapper)
- Simplified analytics (#607)
- Removed BaseAccount inheritance of EvmServerAccount (#581)
- Added new methods for the end user client to add additional EVM accounts, EVM Smart Accounts, and Solana accounts. (#578)
- Added convenience methods to the EndUserAccount object for adding accounts. (#579)
- Makes create_facilitator_config compatible with python x402 v2 sdk (#555)
- Relaxed dependency version constraints (#561)
- Added importEndUser to the end user client (#545)
- Improved handling of ECDSA-formatted API keys. (#546)
- Added spend permissions for pre-generated smart accounts (#541)
- 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.