Added
- Add HD wallet derivation:
WalletCreateRequestBody.derivation()derives a new wallet from an existing HD root wallet, andWallet.parentWalletId()returns the root wallet’s ID. - Add
TransferRequestBody.custodyOptions()to pass payment initiation and Strong Customer Authentication (SCA) context for custodial wallet transfers. - Add
developerFeePercenttoCreatePayoutRequestBody,BridgeCreateFiatDepositAccountRequestBody,PayoutResponse, andBridgeFiatDepositAccount. - Add
PayoutDestination.paymentRail()to choose the fiat payment rail for a payout. - Add
BridgeCreateExternalFiatAccountRequestBody.accountOwner(), required foriban,gb, andswiftaccounts. - Add the
SolanaInstructionDataConditionpolicy condition, which matches Solana instruction arguments and accounts using an inline Anchor IDL. - Add
FundsDepositedWebhookPayload.depositMetadata()to identify refunded deposits. - Add the
TempoZoneSettlementWalletActionStepwallet action step. - Add
User.frozenAt(),KyxEndorsement.issues(), andCustodianTransactionWalletActionStep.transactionHash().
Breaking changes
Model constructor parameter orderPublic constructors on model classes (io.privy.api.models.*) now take their parameters in alphabetical order by field name. This is a one-time change caused by moving the SDK to a new source OpenAPI spec. Builders, getters, with* methods, SDK service methods, and the JSON wire format are unchanged. Apps that create models with Model.builder() are not affected.Apps that call model constructors positionally should switch to Model.builder(). Most of those calls fail to compile, so the compiler points to each one. A few still compile because the reordered parameters share a type, and assign values to the wrong fields. For example, new NamedTokenTransferSource("base", "usdc") now sets asset to "base" and chain to "usdc".Check any positional calls to the following classes. The request models UserOperationInput, NamedTokenTransferSource, CustomTokenTransferSource, ExternalFiatAccountAddress, SparkTransferTokensRpcInputParams, and TronRawDataForSign are the most likely to appear in app code. In TronRawDataForSign, timestamp and expiration swap places.AuthorizationKey,CustomTokenTransferSource,DepositCompletedDestination,EarnIncetiveClaimRewardEntry,EthereumSendCallsRpcResponseData,EthereumSendTransactionRpcResponseData,ExternalFiatAccountAddress,FailureReason,Gas,IntentExecutedWebhookPayloadBaseActionResult,IntentFailedWebhookPayloadBaseActionResult,KeyQuorumIntentResponseBaseActionResult,KyxCapabilities,KyxTosStatusDetail,LinkedAccountCustomOauth,NamedTokenTransferSource,OrganizationCreateRequestBody,OrganizationUpdateRequestBody,PayoutSource,PolicyIntentResponseBaseActionResult,PrivateKeyExportWebhookPayload,RpcIntentResponseBaseActionResult,RuleDeleteIntentResponseBaseActionResult,RuleIntentResponseBaseActionResult,RuleMutateIntentResponseBaseActionResult,SolanaSignAndSendTransactionRpcResponseData,SparkCreateLightningInvoiceRpcInputParams,SparkLightningReceiveRequest,SparkTransferLeaf,SparkTransferTokensRpcInputParams,TempoCall,TransferIntentResponseBaseActionResult,TronRawDataForSend,TronRawDataForSign,TronSendTransactionRpcResponseData,UserOperationInput,WalletFundsNativeTokenAsset,WalletIntentResponseBaseActionResult,WalletRecoveredWebhookPayload, andYieldClaimReward.
toString() output now lists fields in the same alphabetical order.Other changesUsageCrossChainFeeRecordedWebhookPayloadrenamed toUsageSwapProviderFeeRecordedWebhookPayload, matching theusage.swap_provider_fee.recordedwebhook event.UsageCrossChainFeeRecordedResponserenamed toUsageSwapProviderFeeRecordedResponse.developerFeePercentis now required when buildingPayoutResponseandBridgeFiatDepositAccount.- Constructors of
Wallet,User,TransferRequestBody,WalletCreateRequestBody,KyxEndorsement,FundsDepositedWebhookPayload,CustodianTransactionWalletActionStep,BridgeCreateExternalFiatAccountRequestBody,BridgeCreateFiatDepositAccountRequestBody,BridgeFiatDepositAccount, andPayoutResponsetake the new fields listed above. Builders are not affected.
Added
- Add organization CRUD endpoints.
- Add organization KYB endpoints.
- Add organization external fiat account endpoints.
- Add fiat deposit account endpoints.
- Add the fiat payout endpoint with authorization signature support.
- Add
CONTAINS,STARTS_WITH, andENDS_WITHoperators toConditionOperatorfor policy conditions. - Add XRPL chain support via
WalletChainTypeandCurveSigningChainType.
Breaking changes
WithEncryptionrenamed toEncryptedWalletAuthenticateResponseinWalletAuthenticateWithJwtResponseoneOf factory methods.WithoutEncryptionrenamed toRawWalletAuthenticateResponse.AccessListrenamed toAccessListEntry.EntrypointVersionrenamed toEVMUserOperationEntrypointVersion.TransactionStatusrenamed toBlockchainTransactionStatus.LinkedAccountBaseWalletChainTyperenamed toFirstClassChainType.CredentialDeviceTyperenamed toLinkedAccountPasskeyCredentialDeviceType.APIException.bodyAsString()return type changed fromStringtoOptional<String>. Use.orElse(e.getMessage())to fall back to the error message.APIException.body()return type changed frombyte[]toOptional<byte[]>.
Added
- Add support for
POST /v1/wallets/authenticate/intentsendpoint. - Add intent-bound signing key exchange utility.
Added
- Intent authorization via JWT exchange endpoint (
intents/authorize). authorizeIntentconvenience wrapper onPrivyIntentsService.
Added
AuthorizationSignerfunctional interface for external signing via KMS, HSM, or hardware wallets. UseAuthorizationContext.addSigner()orAuthorizationContext.withSigner()to register signers.- New
signTransactionandsendTransactionoverloads onPrivyEthereumServicethat acceptUnsignedEthereumTransaction(union of standard and Tempo transactions). Existing overloads forUnsignedStandardEthereumTransactionare preserved for backward compatibility. - Spark Protocol support (Bitcoin/Lightning L2) with ~65 new classes including
SparkNetwork,SparkBalance, lightning invoice support, and RPC methods. - Intent system with
IntentType,IntentAuthorization, and intent lifecycle webhook payloads. - Wallet action webhooks for transfer, swap, earn deposit, earn incentive claim, earn withdraw lifecycles, and yield webhooks.
- Tempo transaction (type 118) support with
UnsignedTempoTransaction,TempoCall,TempoAAAuthorization, andTempoFeePayerSignature. AccessListtype for Ethereum access lists.EthereumSendCallsCall,EthereumSendCallsRpcInput, andEthereumSendCallsRpcResponsefor batched calls.- Export RPC methods:
ExportPrivateKeyRpcInput/ResponseandExportSeedPhraseRpcInput/Response. - New
RawSignInput,RawSignInputParams,RawSignBytesParams,RawSignHashParamstypes replacing the deletedRawSignRequest/RawSignRequestParams. - ABI and smart contract types:
AbiParameter,AbiSchema,EthereumTypedDataInput,TypedData. - Wallet action step types:
WalletActionStep,WalletActionType, and chain-specific variants. - Wallet asset types:
WalletAsset,WalletEthereumAsset,WalletSolanaAsset. - New fields:
referenceIdandexperimentalDataSuffixonEthereumSendTransactionRpcInput;walletIdonEthereumPersonalSignRpcInputandEthereumSignTransactionRpcInput.
Breaking changes
WalletsWallets.update()now takes a singleWalletUpdateRequestobject instead of multi-parameter overloads.Wallets.export()now takes a singleWalletExportRequestobject instead of multi-parameter overloads.WalletUpdateRequest.requestBody()renamed towalletUpdateRequestBody().WalletUpdateRequestBodymoved fromoperationstocomponentspackage.WalletUpdateRequestBody.additionalSigners()changed fromList<WalletAdditionalSignerItem>toList<AdditionalSignerItemInput>.Wallet.additionalSigners()changed fromList<WalletAdditionalSigner>toList<WalletAdditionalSignerItem>.WalletAdditionalSignerdeleted, replaced byWalletAdditionalSignerItem.UserOwnerandPublicKeyOwnerdeleted, replaced byOwnerInputUserandOwnerInputPublicKey.
WalletRpcRequest.requestBody()renamed towalletRpcRequestBody().WalletRpcResponse.oneOf()removed; usewalletRpcResponse()returningOptional<WalletRpcResponse>from thecomponentspackage.WalletRpcRequestBodyandWalletRpcResponseBodymoved fromoperationstocomponentspackage.RawSignRequestandRawSignRequestParams(in operations) deleted, replaced byRawSignInput/RawSignInputParamsin components.- Ethereum transaction field wrapper classes (e.g.,
EthereumSendTransactionRpcInputChainId,...GasLimit,...Value) removed and replaced withUnsignedStandardEthereumTransaction+Quantity. EthereumSignTransactionRpcInputParams.transaction()andEthereumSendTransactionRpcInputParams.transaction()type changed fromUnsignedStandardEthereumTransactiontoUnsignedEthereumTransaction. UseUnsignedEthereumTransaction.of(transaction)to wrap existing instances.
Policies.update()now takes a singlePolicyUpdateRequestobject.Policies.createRule()now takes a singleCreateRuleRequestobject.Policies.deleteRule()now takes a singleDeleteRuleRequestobject.PolicyCreateRequestBody.rules()now acceptsList<Rule>instead ofList<PolicyRuleRequestBody>.PolicyChainTypedeleted, replaced byWalletChainType.PolicyDeleteResponse.object()renamed tosuccessResponse().
KeyQuorums.update()now takes a singleKeyQuorumUpdateRequestobject.KeyQuorumCreateRequestBodyandKeyQuorumUpdateRequestBodymoved fromoperationstocomponentspackage.- Builder methods renamed:
.requestBody()to.keyQuorumCreateRequestBody()/.keyQuorumUpdateRequestBody().
Transaction.status()changed fromStatusEnumtoTransactionStatus.
FundsDepositedWebhookPayload/FundsWithdrawnWebhookPayloadasset sub-types consolidated intoWalletFundsAssetunion.
Changed
- BREAKING:
Statuschanged from an enum (BROADCASTED,CONFIRMED, etc.) to a oneOf union class (StatusOk | StatusDisabled | StatusClosed). This completely changes theStatustype and its API surface. - BREAKING:
Transaction.status()return type changed fromStatus(enum) toStatusEnum(new enum). The oldStatustype is now a different class entirely. - BREAKING:
RawSignRequestParamschanged from a concrete class withbytes(),encoding(),hashFunction()fields to a oneOf union ofHash | Bytes. The builder and all field accessors are removed. - BREAKING:
RawSignRequestParamsUniondeleted;RawSignRequest.params()now returnsRawSignRequestParams(which is the new oneOf type) instead ofRawSignRequestParamsUnion. - BREAKING:
UserLinkedAccountUnlinkRequestBody.type()changed fromType(deleted enum) toLinkedAccountType(new enum).
- BREAKING:
LinkedAccountCurveSigningEmbeddedWallet.recoveryMethod()changed fromLinkedAccountCurveSigningEmbeddedWalletRecoveryMethodtoEmbeddedWalletRecoveryMethod.
- BREAKING:
WalletBalanceRequestconstructor:assetandchainparameters changed from@Nonnullto@Nullable. The short-form constructor now only takeswalletId. Return types ofasset()andchain()changed from direct values toOptional<>. - BREAKING:
RawSignResponseconstructor now requires amethodparameter (new required field). - Multiple linked account embedded wallet constructors now include
importedanddelegatedas requiredbooleanparameters instead of optionalBoolean.
Initial release of the Java SDK. See the quickstart guide for more
details on how to get started.

