diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index facdac35..8b84e553 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -59,16 +59,18 @@ docs/AddressNotAvailableError.md docs/AddressRegistryAddVaultOptOutsRequest.md docs/AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner.md docs/AddressRegistryAddVaultOptOutsResponse.md -docs/AddressRegistryError.md +docs/AddressRegistryCreateProofOfOwnershipRequest.md +docs/AddressRegistryCreateProofOfOwnershipResponse.md docs/AddressRegistryGetVaultOptOutResponse.md docs/AddressRegistryLegalEntity.md docs/AddressRegistryListVaultOptOutsResponse.md docs/AddressRegistryRemoveAllVaultOptOutsResponse.md docs/AddressRegistryRemoveVaultOptOutResponse.md docs/AddressRegistryTenantRegistryResponse.md -docs/AddressRegistryTravelRuleProvider.md docs/AddressRegistryVaultListOrder.md docs/AddressRegistryVaultOptOutItem.md +docs/AddressRegistryVerifyProofOfOwnershipRequest.md +docs/AddressRegistryVerifyProofOfOwnershipResponse.md docs/AddressReverseLookupResponse.md docs/AddressesFilters.md docs/AlertExposureTypeEnum.md @@ -200,11 +202,17 @@ docs/CantonCall.md docs/CantonCallAllocationWithdraw.md docs/CantonCallAllowListAdd.md docs/CantonCallAllowListRemove.md +docs/CantonCallDetails.md docs/CantonCallEndInvestorInvite.md docs/CantonCallEndInvestorInviteCancel.md docs/CantonCallEndInvestorOffboard.md docs/CantonCallParticipantOnboarding.md docs/CantonCallTransferWithdraw.md +docs/CantonDetails.md +docs/CantonDomainEnum.md +docs/CantonOfferResponseDetails.md +docs/CantonSettlementDetails.md +docs/CantonVendorEnum.md docs/ChainDescriptor.md docs/ChainInfoResponse.md docs/ChannelDvnConfigWithConfirmations.md @@ -257,7 +265,7 @@ docs/ConnectedAccountTradingPair.md docs/ConnectedAccountTradingPairSupportedType.md docs/ConnectedAccountTradingPairsResponse.md docs/ConnectedAccountType.md -docs/ConnectedAccountsBetaApi.md +docs/ConnectedAccountsApi.md docs/ConnectedAccountsResponse.md docs/ConnectedSingleAccount.md docs/ConnectedSingleAccountResponse.md @@ -358,6 +366,7 @@ docs/CreateVaultAccountConnectionRequest.md docs/CreateVaultAccountRequest.md docs/CreateVaultAssetResponse.md docs/CreateWalletRequest.md +docs/CreateWebhookMtlsConfigRequest.md docs/CreateWebhookOauthRequest.md docs/CreateWebhookRequest.md docs/CreateWorkflowExecutionRequestParamsInner.md @@ -372,6 +381,7 @@ docs/DelegationBlockchainPositionInfo.md docs/DelegationSummary.md docs/DeleteNetworkConnectionResponse.md docs/DeleteNetworkIdResponse.md +docs/DeleteWebhookMtlsConfigResponse.md docs/DeleteWebhookOauthResponse.md docs/DeployLayerZeroAdaptersRequest.md docs/DeployableAddressResponse.md @@ -421,6 +431,7 @@ docs/EarnCurator.md docs/EarnMetadata.md docs/EarnProvider.md docs/EditGasStationConfigurationResponse.md +docs/EffectiveUtxoSelectionConfig.md docs/EmbeddedWallet.md docs/EmbeddedWalletAccount.md docs/EmbeddedWalletAddressDetails.md @@ -503,6 +514,7 @@ docs/FiatTransfer.md docs/FixedAmountTypeEnum.md docs/FixedFee.md docs/FlowDirection.md +docs/FokTimeInForce.md docs/FpsHkAddress.md docs/FpsHkDestination.md docs/FpsHkPaymentInfo.md @@ -624,6 +636,10 @@ docs/LegacyPublishResult.md docs/LegacySrcOrDestAttributesInner.md docs/LegalEntityRegistration.md docs/LeiStatus.md +docs/LimitExecutionRequestDetails.md +docs/LimitExecutionResponseDetails.md +docs/LimitTypeDetails.md +docs/LimitTypeEnum.md docs/LinkedTokensCount.md docs/ListApprovalApiKeysResponse.md docs/ListApprovalsResponse.md @@ -792,6 +808,8 @@ docs/PolicyVerdictActionEnum2.md docs/Position.md docs/Position2.md docs/PositionRelatedTransaction.md +docs/PostTradeSettlement.md +docs/PostTradeSettlementType.md docs/PostalAddress.md docs/PreScreening.md docs/PrefundedSettlement.md @@ -1279,10 +1297,12 @@ docs/UpdateTagRequest.md docs/UpdateTokenOwnershipStatusDto.md docs/UpdateVaultAccountAssetAddressRequest.md docs/UpdateVaultAccountRequest.md +docs/UpdateWebhookMtlsConfigRequest.md docs/UpdateWebhookOauthRequest.md docs/UpdateWebhookRequest.md docs/UpdateWorkflowStatusRequest.md docs/UpdateWorkflowStatusResponse.md +docs/UpsertUtxoSelectionConfigRequest.md docs/UsWirePaymentInfo.md docs/UsdcGatewayWalletAsset.md docs/UsdcGatewayWalletInfoResponse.md @@ -1301,10 +1321,16 @@ docs/UtxoIdentifier.md docs/UtxoInput.md docs/UtxoInput2.md docs/UtxoInputSelection.md +docs/UtxoLabelFailure.md +docs/UtxoLabelsErrorResponse.md docs/UtxoManagementBetaApi.md docs/UtxoOutput.md +docs/UtxoSelectionConfigEntry.md +docs/UtxoSelectionConfigResponse.md +docs/UtxoSelectionConfigSourceEnum.md docs/UtxoSelectionFilters.md docs/UtxoSelectionParams.md +docs/UtxoSelectionStrategyEnum.md docs/ValidateAddressResponse.md docs/ValidateLayerZeroChannelResponse.md docs/ValidationKeyDto.md @@ -1330,7 +1356,7 @@ docs/Web3ConnectionsApi.md docs/Webhook.md docs/WebhookEvent.md docs/WebhookMetric.md -docs/WebhookMtls.md +docs/WebhookMtlsConfig.md docs/WebhookMtlsCsrResponse.md docs/WebhookMtlsKeyAlgorithm.md docs/WebhookOauthCredentials.md @@ -1386,7 +1412,7 @@ src/main/java/com/fireblocks/sdk/api/BlockchainsAssetsApi.java src/main/java/com/fireblocks/sdk/api/ComplianceApi.java src/main/java/com/fireblocks/sdk/api/ComplianceOrchestratorBetaApi.java src/main/java/com/fireblocks/sdk/api/ComplianceScreeningConfigurationApi.java -src/main/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApi.java +src/main/java/com/fireblocks/sdk/api/ConnectedAccountsApi.java src/main/java/com/fireblocks/sdk/api/ConsoleUserApi.java src/main/java/com/fireblocks/sdk/api/ContactsApi.java src/main/java/com/fireblocks/sdk/api/ContractInteractionsApi.java @@ -1486,16 +1512,18 @@ src/main/java/com/fireblocks/sdk/model/AddressNotAvailableError.java src/main/java/com/fireblocks/sdk/model/AddressRegistryAddVaultOptOutsRequest.java src/main/java/com/fireblocks/sdk/model/AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner.java src/main/java/com/fireblocks/sdk/model/AddressRegistryAddVaultOptOutsResponse.java -src/main/java/com/fireblocks/sdk/model/AddressRegistryError.java +src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequest.java +src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponse.java src/main/java/com/fireblocks/sdk/model/AddressRegistryGetVaultOptOutResponse.java src/main/java/com/fireblocks/sdk/model/AddressRegistryLegalEntity.java src/main/java/com/fireblocks/sdk/model/AddressRegistryListVaultOptOutsResponse.java src/main/java/com/fireblocks/sdk/model/AddressRegistryRemoveAllVaultOptOutsResponse.java src/main/java/com/fireblocks/sdk/model/AddressRegistryRemoveVaultOptOutResponse.java src/main/java/com/fireblocks/sdk/model/AddressRegistryTenantRegistryResponse.java -src/main/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProvider.java src/main/java/com/fireblocks/sdk/model/AddressRegistryVaultListOrder.java src/main/java/com/fireblocks/sdk/model/AddressRegistryVaultOptOutItem.java +src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequest.java +src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponse.java src/main/java/com/fireblocks/sdk/model/AddressReverseLookupResponse.java src/main/java/com/fireblocks/sdk/model/AddressesFilters.java src/main/java/com/fireblocks/sdk/model/AlertExposureTypeEnum.java @@ -1622,11 +1650,17 @@ src/main/java/com/fireblocks/sdk/model/CantonCall.java src/main/java/com/fireblocks/sdk/model/CantonCallAllocationWithdraw.java src/main/java/com/fireblocks/sdk/model/CantonCallAllowListAdd.java src/main/java/com/fireblocks/sdk/model/CantonCallAllowListRemove.java +src/main/java/com/fireblocks/sdk/model/CantonCallDetails.java src/main/java/com/fireblocks/sdk/model/CantonCallEndInvestorInvite.java src/main/java/com/fireblocks/sdk/model/CantonCallEndInvestorInviteCancel.java src/main/java/com/fireblocks/sdk/model/CantonCallEndInvestorOffboard.java src/main/java/com/fireblocks/sdk/model/CantonCallParticipantOnboarding.java src/main/java/com/fireblocks/sdk/model/CantonCallTransferWithdraw.java +src/main/java/com/fireblocks/sdk/model/CantonDetails.java +src/main/java/com/fireblocks/sdk/model/CantonDomainEnum.java +src/main/java/com/fireblocks/sdk/model/CantonOfferResponseDetails.java +src/main/java/com/fireblocks/sdk/model/CantonSettlementDetails.java +src/main/java/com/fireblocks/sdk/model/CantonVendorEnum.java src/main/java/com/fireblocks/sdk/model/ChainDescriptor.java src/main/java/com/fireblocks/sdk/model/ChainInfoResponse.java src/main/java/com/fireblocks/sdk/model/ChannelDvnConfigWithConfirmations.java @@ -1770,6 +1804,7 @@ src/main/java/com/fireblocks/sdk/model/CreateVaultAccountConnectionRequest.java src/main/java/com/fireblocks/sdk/model/CreateVaultAccountRequest.java src/main/java/com/fireblocks/sdk/model/CreateVaultAssetResponse.java src/main/java/com/fireblocks/sdk/model/CreateWalletRequest.java +src/main/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequest.java src/main/java/com/fireblocks/sdk/model/CreateWebhookOauthRequest.java src/main/java/com/fireblocks/sdk/model/CreateWebhookRequest.java src/main/java/com/fireblocks/sdk/model/CreateWorkflowExecutionRequestParamsInner.java @@ -1784,6 +1819,7 @@ src/main/java/com/fireblocks/sdk/model/DelegationBlockchainPositionInfo.java src/main/java/com/fireblocks/sdk/model/DelegationSummary.java src/main/java/com/fireblocks/sdk/model/DeleteNetworkConnectionResponse.java src/main/java/com/fireblocks/sdk/model/DeleteNetworkIdResponse.java +src/main/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponse.java src/main/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponse.java src/main/java/com/fireblocks/sdk/model/DeployLayerZeroAdaptersRequest.java src/main/java/com/fireblocks/sdk/model/DeployableAddressResponse.java @@ -1831,6 +1867,7 @@ src/main/java/com/fireblocks/sdk/model/EarnCurator.java src/main/java/com/fireblocks/sdk/model/EarnMetadata.java src/main/java/com/fireblocks/sdk/model/EarnProvider.java src/main/java/com/fireblocks/sdk/model/EditGasStationConfigurationResponse.java +src/main/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfig.java src/main/java/com/fireblocks/sdk/model/EmbeddedWallet.java src/main/java/com/fireblocks/sdk/model/EmbeddedWalletAccount.java src/main/java/com/fireblocks/sdk/model/EmbeddedWalletAddressDetails.java @@ -1909,6 +1946,7 @@ src/main/java/com/fireblocks/sdk/model/FiatTransfer.java src/main/java/com/fireblocks/sdk/model/FixedAmountTypeEnum.java src/main/java/com/fireblocks/sdk/model/FixedFee.java src/main/java/com/fireblocks/sdk/model/FlowDirection.java +src/main/java/com/fireblocks/sdk/model/FokTimeInForce.java src/main/java/com/fireblocks/sdk/model/FpsHkAddress.java src/main/java/com/fireblocks/sdk/model/FpsHkDestination.java src/main/java/com/fireblocks/sdk/model/FpsHkPaymentInfo.java @@ -2025,6 +2063,10 @@ src/main/java/com/fireblocks/sdk/model/LegacyPublishResult.java src/main/java/com/fireblocks/sdk/model/LegacySrcOrDestAttributesInner.java src/main/java/com/fireblocks/sdk/model/LegalEntityRegistration.java src/main/java/com/fireblocks/sdk/model/LeiStatus.java +src/main/java/com/fireblocks/sdk/model/LimitExecutionRequestDetails.java +src/main/java/com/fireblocks/sdk/model/LimitExecutionResponseDetails.java +src/main/java/com/fireblocks/sdk/model/LimitTypeDetails.java +src/main/java/com/fireblocks/sdk/model/LimitTypeEnum.java src/main/java/com/fireblocks/sdk/model/LinkedTokensCount.java src/main/java/com/fireblocks/sdk/model/ListApprovalApiKeysResponse.java src/main/java/com/fireblocks/sdk/model/ListApprovalsResponse.java @@ -2184,6 +2226,8 @@ src/main/java/com/fireblocks/sdk/model/PolicyVerdictActionEnum2.java src/main/java/com/fireblocks/sdk/model/Position.java src/main/java/com/fireblocks/sdk/model/Position2.java src/main/java/com/fireblocks/sdk/model/PositionRelatedTransaction.java +src/main/java/com/fireblocks/sdk/model/PostTradeSettlement.java +src/main/java/com/fireblocks/sdk/model/PostTradeSettlementType.java src/main/java/com/fireblocks/sdk/model/PostalAddress.java src/main/java/com/fireblocks/sdk/model/PreScreening.java src/main/java/com/fireblocks/sdk/model/PrefundedSettlement.java @@ -2660,10 +2704,12 @@ src/main/java/com/fireblocks/sdk/model/UpdateTagRequest.java src/main/java/com/fireblocks/sdk/model/UpdateTokenOwnershipStatusDto.java src/main/java/com/fireblocks/sdk/model/UpdateVaultAccountAssetAddressRequest.java src/main/java/com/fireblocks/sdk/model/UpdateVaultAccountRequest.java +src/main/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequest.java src/main/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequest.java src/main/java/com/fireblocks/sdk/model/UpdateWebhookRequest.java src/main/java/com/fireblocks/sdk/model/UpdateWorkflowStatusRequest.java src/main/java/com/fireblocks/sdk/model/UpdateWorkflowStatusResponse.java +src/main/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequest.java src/main/java/com/fireblocks/sdk/model/UsWirePaymentInfo.java src/main/java/com/fireblocks/sdk/model/UsdcGatewayWalletAsset.java src/main/java/com/fireblocks/sdk/model/UsdcGatewayWalletInfoResponse.java @@ -2680,9 +2726,15 @@ src/main/java/com/fireblocks/sdk/model/UtxoIdentifier.java src/main/java/com/fireblocks/sdk/model/UtxoInput.java src/main/java/com/fireblocks/sdk/model/UtxoInput2.java src/main/java/com/fireblocks/sdk/model/UtxoInputSelection.java +src/main/java/com/fireblocks/sdk/model/UtxoLabelFailure.java +src/main/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponse.java src/main/java/com/fireblocks/sdk/model/UtxoOutput.java +src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntry.java +src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponse.java +src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnum.java src/main/java/com/fireblocks/sdk/model/UtxoSelectionFilters.java src/main/java/com/fireblocks/sdk/model/UtxoSelectionParams.java +src/main/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnum.java src/main/java/com/fireblocks/sdk/model/ValidateAddressResponse.java src/main/java/com/fireblocks/sdk/model/ValidateLayerZeroChannelResponse.java src/main/java/com/fireblocks/sdk/model/ValidationKeyDto.java @@ -2706,7 +2758,7 @@ src/main/java/com/fireblocks/sdk/model/WalletAssetAdditionalInfo.java src/main/java/com/fireblocks/sdk/model/Webhook.java src/main/java/com/fireblocks/sdk/model/WebhookEvent.java src/main/java/com/fireblocks/sdk/model/WebhookMetric.java -src/main/java/com/fireblocks/sdk/model/WebhookMtls.java +src/main/java/com/fireblocks/sdk/model/WebhookMtlsConfig.java src/main/java/com/fireblocks/sdk/model/WebhookMtlsCsrResponse.java src/main/java/com/fireblocks/sdk/model/WebhookMtlsKeyAlgorithm.java src/main/java/com/fireblocks/sdk/model/WebhookOauthCredentials.java @@ -2736,7 +2788,7 @@ src/test/java/com/fireblocks/sdk/api/BlockchainsAssetsApiTest.java src/test/java/com/fireblocks/sdk/api/ComplianceApiTest.java src/test/java/com/fireblocks/sdk/api/ComplianceOrchestratorBetaApiTest.java src/test/java/com/fireblocks/sdk/api/ComplianceScreeningConfigurationApiTest.java -src/test/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApiTest.java +src/test/java/com/fireblocks/sdk/api/ConnectedAccountsApiTest.java src/test/java/com/fireblocks/sdk/api/ConsoleUserApiTest.java src/test/java/com/fireblocks/sdk/api/ContactsApiTest.java src/test/java/com/fireblocks/sdk/api/ContractInteractionsApiTest.java @@ -2835,16 +2887,18 @@ src/test/java/com/fireblocks/sdk/model/AddressNotAvailableErrorTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryAddVaultOptOutsRequestTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInnerTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryAddVaultOptOutsResponseTest.java -src/test/java/com/fireblocks/sdk/model/AddressRegistryErrorTest.java +src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequestTest.java +src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponseTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryGetVaultOptOutResponseTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryLegalEntityTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryListVaultOptOutsResponseTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryRemoveAllVaultOptOutsResponseTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryRemoveVaultOptOutResponseTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryTenantRegistryResponseTest.java -src/test/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProviderTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryVaultListOrderTest.java src/test/java/com/fireblocks/sdk/model/AddressRegistryVaultOptOutItemTest.java +src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequestTest.java +src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponseTest.java src/test/java/com/fireblocks/sdk/model/AddressReverseLookupResponseTest.java src/test/java/com/fireblocks/sdk/model/AddressesFiltersTest.java src/test/java/com/fireblocks/sdk/model/AlertExposureTypeEnumTest.java @@ -2970,12 +3024,18 @@ src/test/java/com/fireblocks/sdk/model/CancelTransactionResponseTest.java src/test/java/com/fireblocks/sdk/model/CantonCallAllocationWithdrawTest.java src/test/java/com/fireblocks/sdk/model/CantonCallAllowListAddTest.java src/test/java/com/fireblocks/sdk/model/CantonCallAllowListRemoveTest.java +src/test/java/com/fireblocks/sdk/model/CantonCallDetailsTest.java src/test/java/com/fireblocks/sdk/model/CantonCallEndInvestorInviteCancelTest.java src/test/java/com/fireblocks/sdk/model/CantonCallEndInvestorInviteTest.java src/test/java/com/fireblocks/sdk/model/CantonCallEndInvestorOffboardTest.java src/test/java/com/fireblocks/sdk/model/CantonCallParticipantOnboardingTest.java src/test/java/com/fireblocks/sdk/model/CantonCallTest.java src/test/java/com/fireblocks/sdk/model/CantonCallTransferWithdrawTest.java +src/test/java/com/fireblocks/sdk/model/CantonDetailsTest.java +src/test/java/com/fireblocks/sdk/model/CantonDomainEnumTest.java +src/test/java/com/fireblocks/sdk/model/CantonOfferResponseDetailsTest.java +src/test/java/com/fireblocks/sdk/model/CantonSettlementDetailsTest.java +src/test/java/com/fireblocks/sdk/model/CantonVendorEnumTest.java src/test/java/com/fireblocks/sdk/model/ChainDescriptorTest.java src/test/java/com/fireblocks/sdk/model/ChainInfoResponseTest.java src/test/java/com/fireblocks/sdk/model/ChannelDvnConfigWithConfirmationsTest.java @@ -3119,6 +3179,7 @@ src/test/java/com/fireblocks/sdk/model/CreateVaultAccountConnectionRequestTest.j src/test/java/com/fireblocks/sdk/model/CreateVaultAccountRequestTest.java src/test/java/com/fireblocks/sdk/model/CreateVaultAssetResponseTest.java src/test/java/com/fireblocks/sdk/model/CreateWalletRequestTest.java +src/test/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequestTest.java src/test/java/com/fireblocks/sdk/model/CreateWebhookOauthRequestTest.java src/test/java/com/fireblocks/sdk/model/CreateWebhookRequestTest.java src/test/java/com/fireblocks/sdk/model/CreateWorkflowExecutionRequestParamsInnerTest.java @@ -3133,6 +3194,7 @@ src/test/java/com/fireblocks/sdk/model/DelegationSummaryTest.java src/test/java/com/fireblocks/sdk/model/DelegationTest.java src/test/java/com/fireblocks/sdk/model/DeleteNetworkConnectionResponseTest.java src/test/java/com/fireblocks/sdk/model/DeleteNetworkIdResponseTest.java +src/test/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponseTest.java src/test/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponseTest.java src/test/java/com/fireblocks/sdk/model/DeployLayerZeroAdaptersRequestTest.java src/test/java/com/fireblocks/sdk/model/DeployableAddressResponseTest.java @@ -3180,6 +3242,7 @@ src/test/java/com/fireblocks/sdk/model/EarnCuratorTest.java src/test/java/com/fireblocks/sdk/model/EarnMetadataTest.java src/test/java/com/fireblocks/sdk/model/EarnProviderTest.java src/test/java/com/fireblocks/sdk/model/EditGasStationConfigurationResponseTest.java +src/test/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfigTest.java src/test/java/com/fireblocks/sdk/model/EmbeddedWalletAccountTest.java src/test/java/com/fireblocks/sdk/model/EmbeddedWalletAddressDetailsTest.java src/test/java/com/fireblocks/sdk/model/EmbeddedWalletAlgoritmTest.java @@ -3258,6 +3321,7 @@ src/test/java/com/fireblocks/sdk/model/FiatTransferTest.java src/test/java/com/fireblocks/sdk/model/FixedAmountTypeEnumTest.java src/test/java/com/fireblocks/sdk/model/FixedFeeTest.java src/test/java/com/fireblocks/sdk/model/FlowDirectionTest.java +src/test/java/com/fireblocks/sdk/model/FokTimeInForceTest.java src/test/java/com/fireblocks/sdk/model/FpsHkAddressTest.java src/test/java/com/fireblocks/sdk/model/FpsHkDestinationTest.java src/test/java/com/fireblocks/sdk/model/FpsHkPaymentInfoTest.java @@ -3374,6 +3438,10 @@ src/test/java/com/fireblocks/sdk/model/LegacyPublishResultTest.java src/test/java/com/fireblocks/sdk/model/LegacySrcOrDestAttributesInnerTest.java src/test/java/com/fireblocks/sdk/model/LegalEntityRegistrationTest.java src/test/java/com/fireblocks/sdk/model/LeiStatusTest.java +src/test/java/com/fireblocks/sdk/model/LimitExecutionRequestDetailsTest.java +src/test/java/com/fireblocks/sdk/model/LimitExecutionResponseDetailsTest.java +src/test/java/com/fireblocks/sdk/model/LimitTypeDetailsTest.java +src/test/java/com/fireblocks/sdk/model/LimitTypeEnumTest.java src/test/java/com/fireblocks/sdk/model/LinkedTokensCountTest.java src/test/java/com/fireblocks/sdk/model/ListApprovalApiKeysResponseTest.java src/test/java/com/fireblocks/sdk/model/ListApprovalsResponseTest.java @@ -3533,6 +3601,8 @@ src/test/java/com/fireblocks/sdk/model/PolicyVerdictActionEnumTest.java src/test/java/com/fireblocks/sdk/model/Position2Test.java src/test/java/com/fireblocks/sdk/model/PositionRelatedTransactionTest.java src/test/java/com/fireblocks/sdk/model/PositionTest.java +src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTest.java +src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTypeTest.java src/test/java/com/fireblocks/sdk/model/PostalAddressTest.java src/test/java/com/fireblocks/sdk/model/PreScreeningTest.java src/test/java/com/fireblocks/sdk/model/PrefundedSettlementTest.java @@ -4009,10 +4079,12 @@ src/test/java/com/fireblocks/sdk/model/UpdateTagRequestTest.java src/test/java/com/fireblocks/sdk/model/UpdateTokenOwnershipStatusDtoTest.java src/test/java/com/fireblocks/sdk/model/UpdateVaultAccountAssetAddressRequestTest.java src/test/java/com/fireblocks/sdk/model/UpdateVaultAccountRequestTest.java +src/test/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequestTest.java src/test/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequestTest.java src/test/java/com/fireblocks/sdk/model/UpdateWebhookRequestTest.java src/test/java/com/fireblocks/sdk/model/UpdateWorkflowStatusRequestTest.java src/test/java/com/fireblocks/sdk/model/UpdateWorkflowStatusResponseTest.java +src/test/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequestTest.java src/test/java/com/fireblocks/sdk/model/UsWirePaymentInfoTest.java src/test/java/com/fireblocks/sdk/model/UsdcGatewayWalletAssetTest.java src/test/java/com/fireblocks/sdk/model/UsdcGatewayWalletInfoResponseTest.java @@ -4029,9 +4101,15 @@ src/test/java/com/fireblocks/sdk/model/UtxoIdentifierTest.java src/test/java/com/fireblocks/sdk/model/UtxoInput2Test.java src/test/java/com/fireblocks/sdk/model/UtxoInputSelectionTest.java src/test/java/com/fireblocks/sdk/model/UtxoInputTest.java +src/test/java/com/fireblocks/sdk/model/UtxoLabelFailureTest.java +src/test/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponseTest.java src/test/java/com/fireblocks/sdk/model/UtxoOutputTest.java +src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntryTest.java +src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponseTest.java +src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnumTest.java src/test/java/com/fireblocks/sdk/model/UtxoSelectionFiltersTest.java src/test/java/com/fireblocks/sdk/model/UtxoSelectionParamsTest.java +src/test/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnumTest.java src/test/java/com/fireblocks/sdk/model/ValidateAddressResponseTest.java src/test/java/com/fireblocks/sdk/model/ValidateLayerZeroChannelResponseTest.java src/test/java/com/fireblocks/sdk/model/ValidationKeyDtoTest.java @@ -4054,9 +4132,9 @@ src/test/java/com/fireblocks/sdk/model/WalletAssetAdditionalInfoTest.java src/test/java/com/fireblocks/sdk/model/WalletAssetTest.java src/test/java/com/fireblocks/sdk/model/WebhookEventTest.java src/test/java/com/fireblocks/sdk/model/WebhookMetricTest.java +src/test/java/com/fireblocks/sdk/model/WebhookMtlsConfigTest.java src/test/java/com/fireblocks/sdk/model/WebhookMtlsCsrResponseTest.java src/test/java/com/fireblocks/sdk/model/WebhookMtlsKeyAlgorithmTest.java -src/test/java/com/fireblocks/sdk/model/WebhookMtlsTest.java src/test/java/com/fireblocks/sdk/model/WebhookOauthCredentialsTest.java src/test/java/com/fireblocks/sdk/model/WebhookPaginatedResponseTest.java src/test/java/com/fireblocks/sdk/model/WebhookTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 04aae775..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,239 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v32.0.0](https://github.com/fireblocks/java-sdk/compare/v15.0.0...v32.0.0) - 2026-09-23 - -### Merged - -- Generated SDK #2874610640 [`#158`](https://github.com/fireblocks/java-sdk/pull/158) - -## [v15.0.0](https://github.com/fireblocks/java-sdk/compare/v14.1.0...v15.0.0) - 2026-03-15 - -### Merged - -- Generated SDK #3733 (major) [`#128`](https://github.com/fireblocks/java-sdk/pull/128) - -## [v14.1.0](https://github.com/fireblocks/java-sdk/compare/v14.0.0...v14.1.0) - 2026-02-26 - -### Merged - -- Generated SDK #2167 [`#126`](https://github.com/fireblocks/java-sdk/pull/126) - -## [v14.0.0](https://github.com/fireblocks/java-sdk/compare/v13.0.0...v14.0.0) - 2026-02-03 - -### Merged - -- Generated SDK #4746 [`#121`](https://github.com/fireblocks/java-sdk/pull/121) - -## [v13.0.0](https://github.com/fireblocks/java-sdk/compare/v12.1.3...v13.0.0) - 2025-11-13 - -### Merged - -- Generated SDK #5834 [`#116`](https://github.com/fireblocks/java-sdk/pull/116) - -## [v12.1.3](https://github.com/fireblocks/java-sdk/compare/v12.1.2...v12.1.3) - 2025-10-22 - -### Merged - -- Generated SDK #8293 [`#115`](https://github.com/fireblocks/java-sdk/pull/115) - -## [v12.1.2](https://github.com/fireblocks/java-sdk/compare/v12.1.1...v12.1.2) - 2025-09-29 - -### Merged - -- Generated SDK #6061 [`#113`](https://github.com/fireblocks/java-sdk/pull/113) - -## [v12.1.1](https://github.com/fireblocks/java-sdk/compare/v12.1.0...v12.1.1) - 2025-09-10 - -### Merged - -- Generated SDK #1410 [`#111`](https://github.com/fireblocks/java-sdk/pull/111) - -## [v12.1.0](https://github.com/fireblocks/java-sdk/compare/v12.0.0...v12.1.0) - 2025-09-09 - -### Merged - -- Generated SDK #4521 [`#109`](https://github.com/fireblocks/java-sdk/pull/109) - -## [v12.0.0](https://github.com/fireblocks/java-sdk/compare/v11.2.0...v12.0.0) - 2025-09-01 - -### Merged - -- Generated SDK #7741 [`#108`](https://github.com/fireblocks/java-sdk/pull/108) - -## [v11.2.0](https://github.com/fireblocks/java-sdk/compare/v11.1.0...v11.2.0) - 2025-08-21 - -### Merged - -- Generated SDK #3302 [`#107`](https://github.com/fireblocks/java-sdk/pull/107) - -## [v11.1.0](https://github.com/fireblocks/java-sdk/compare/v11.0.0...v11.1.0) - 2025-08-11 - -### Merged - -- Generated SDK #1782 [`#105`](https://github.com/fireblocks/java-sdk/pull/105) - -## [v11.0.0](https://github.com/fireblocks/java-sdk/compare/v10.4.0...v11.0.0) - 2025-07-15 - -### Merged - -- Generated SDK #5610 [`#103`](https://github.com/fireblocks/java-sdk/pull/103) - -## [v10.4.0](https://github.com/fireblocks/java-sdk/compare/v10.3.0...v10.4.0) - 2025-06-29 - -### Merged - -- Generated SDK #1492 [`#101`](https://github.com/fireblocks/java-sdk/pull/101) - -## [v10.3.0](https://github.com/fireblocks/java-sdk/compare/v10.2.0...v10.3.0) - 2025-06-18 - -### Merged - -- Generated SDK #4009 [`#99`](https://github.com/fireblocks/java-sdk/pull/99) - -## [v10.2.0](https://github.com/fireblocks/java-sdk/compare/v10.1.1...v10.2.0) - 2025-06-04 - -### Merged - -- Generated SDK #8912 [`#98`](https://github.com/fireblocks/java-sdk/pull/98) - -## [v10.1.1](https://github.com/fireblocks/java-sdk/compare/v10.1.0...v10.1.1) - 2025-05-18 - -### Merged - -- Generated SDK #5019 [`#97`](https://github.com/fireblocks/java-sdk/pull/97) - -## [v10.1.0](https://github.com/fireblocks/java-sdk/compare/v10.0.2...v10.1.0) - 2025-05-07 - -### Merged - -- Generated SDK #7076 [`#95`](https://github.com/fireblocks/java-sdk/pull/95) - -## [v10.0.2](https://github.com/fireblocks/java-sdk/compare/v10.0.1...v10.0.2) - 2025-04-20 - -### Merged - -- Generated SDK #4794 [`#94`](https://github.com/fireblocks/java-sdk/pull/94) - -## [v10.0.1](https://github.com/fireblocks/java-sdk/compare/v10.0.0...v10.0.1) - 2025-04-07 - -### Merged - -- Generated SDK #3065 [`#93`](https://github.com/fireblocks/java-sdk/pull/93) - -## [v10.0.0](https://github.com/fireblocks/java-sdk/compare/v9.0.0...v10.0.0) - 2025-03-30 - -### Merged - -- Generated SDK #619 [`#90`](https://github.com/fireblocks/java-sdk/pull/90) - -## [v9.0.0](https://github.com/fireblocks/java-sdk/compare/v8.1.0...v9.0.0) - 2025-03-17 - -### Merged - -- Generated SDK #645 [`#89`](https://github.com/fireblocks/java-sdk/pull/89) - -## [v8.1.0](https://github.com/fireblocks/java-sdk/compare/v8.0.1...v8.1.0) - 2025-02-24 - -### Merged - -- Generated SDK #9833 [`#84`](https://github.com/fireblocks/java-sdk/pull/84) - -## [v8.0.1](https://github.com/fireblocks/java-sdk/compare/v8.0.0...v8.0.1) - 2025-02-12 - -### Merged - -- Generated SDK #4262 [`#82`](https://github.com/fireblocks/java-sdk/pull/82) - -## [v8.0.0](https://github.com/fireblocks/java-sdk/compare/v7.0.0...v8.0.0) - 2025-02-02 - -### Merged - -- Generated SDK #538 [`#80`](https://github.com/fireblocks/java-sdk/pull/80) - -## [v7.0.0](https://github.com/fireblocks/java-sdk/compare/v6.0.0...v7.0.0) - 2025-01-08 - -### Merged - -- Generated SDK #8699 [`#77`](https://github.com/fireblocks/java-sdk/pull/77) - -## [v6.0.0](https://github.com/fireblocks/java-sdk/compare/v5.0.0...v6.0.0) - 2024-12-05 - -### Merged - -- Generated SDK #1430 [`#73`](https://github.com/fireblocks/java-sdk/pull/73) - -## [v5.0.0](https://github.com/fireblocks/java-sdk/compare/v4.0.0...v5.0.0) - 2024-10-31 - -### Merged - -- Generated SDK #5184 [`#71`](https://github.com/fireblocks/java-sdk/pull/71) - -## [v4.0.0](https://github.com/fireblocks/java-sdk/compare/v3.1.0...v4.0.0) - 2024-09-17 - -### Merged - -- Generated SDK #237 [`#70`](https://github.com/fireblocks/java-sdk/pull/70) - -## [v3.1.0](https://github.com/fireblocks/java-sdk/compare/v3.0.0...v3.1.0) - 2024-07-25 - -### Merged - -- Generated SDK #6749 [`#67`](https://github.com/fireblocks/java-sdk/pull/67) - -## [v3.0.0](https://github.com/fireblocks/java-sdk/compare/v2.1.0...v3.0.0) - 2024-07-17 - -### Merged - -- Generated SDK #6152 [`#65`](https://github.com/fireblocks/java-sdk/pull/65) -- Generated SDK #7984 [`#62`](https://github.com/fireblocks/java-sdk/pull/62) -- Generated SDK #2873 [`#61`](https://github.com/fireblocks/java-sdk/pull/61) - -## [v2.1.0](https://github.com/fireblocks/java-sdk/compare/v2.0.1...v2.1.0) - 2024-06-04 - -### Merged - -- Generated SDK for version COR-46191/fix_pipelines [`#24`](https://github.com/fireblocks/java-sdk/pull/24) -- Generated SDK for version COR-46191/fix_pipelines [`#23`](https://github.com/fireblocks/java-sdk/pull/23) -- Generated SDK for version COR-46191/fix_pipelines [`#22`](https://github.com/fireblocks/java-sdk/pull/22) -- Generated SDK for version COR-46191/fix_pipelines [`#21`](https://github.com/fireblocks/java-sdk/pull/21) - -## [v2.0.1](https://github.com/fireblocks/java-sdk/compare/v2.0.0...v2.0.1) - 2024-06-04 - -### Merged - -- Generated SDK for version COR-46191/fix_pipelines [`#20`](https://github.com/fireblocks/java-sdk/pull/20) - -## [v2.0.0](https://github.com/fireblocks/java-sdk/compare/v1.1.0...v2.0.0) - 2024-05-08 - -### Merged - -- feat: add tokenization api [`#12`](https://github.com/fireblocks/java-sdk/pull/12) - -## [v1.1.0](https://github.com/fireblocks/java-sdk/compare/v1.0.1...v1.1.0) - 2024-04-17 - -### Merged - -- feat: add cosigners beta api [`#11`](https://github.com/fireblocks/java-sdk/pull/11) -- fix: fix readme doc headline [`#10`](https://github.com/fireblocks/java-sdk/pull/10) - -## [v1.0.1](https://github.com/fireblocks/java-sdk/compare/v1.0.0...v1.0.1) - 2024-04-07 - -### Merged - -- Generated SDK for version v1.0.1 [`#9`](https://github.com/fireblocks/java-sdk/pull/9) - -## v1.0.0 - 2024-04-07 - -### Merged - -- Generated SDK for version v1.0.0 GA [`#8`](https://github.com/fireblocks/java-sdk/pull/8) -- v0.0.1-beta [`#6`](https://github.com/fireblocks/java-sdk/pull/6) -- Update GitHub Actions workflows [`#5`](https://github.com/fireblocks/java-sdk/pull/5) -- Generated #1189972817 [`#3`](https://github.com/fireblocks/java-sdk/pull/3) -- Add installation instructions [`#2`](https://github.com/fireblocks/java-sdk/pull/2) -- Added Idempotency & NCW headers support #6 [`#1`](https://github.com/fireblocks/java-sdk/pull/1) diff --git a/README.md b/README.md index 0cea5e02..bd0f32dc 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Add this dependency to your project's POM: com.fireblocks.sdk fireblocks-sdk - 32.0.0 + 0.0.0 compile ``` @@ -42,7 +42,7 @@ Add this dependency to your project's POM: Add this dependency to your project's build file: ```groovy -compile "com.fireblocks.sdk:fireblocks-sdk:32.0.0" +compile "com.fireblocks.sdk:fireblocks-sdk:0.0.0" ``` ### Others @@ -55,7 +55,7 @@ mvn clean package Then manually install the following JARs: -- `target/fireblocks-sdk-32.0.0.jar` +- `target/fireblocks-sdk-0.0.0.jar` - `target/lib/*.jar` @@ -173,6 +173,7 @@ Class | Method | HTTP request | Description *ComplianceApi* | [**activateByorkConfig**](docs/ComplianceApi.md#activateByorkConfig) | **POST** /screening/byork/config/activate | Activate BYORK Light *ComplianceApi* | [**addAddressRegistryVaultOptOuts**](docs/ComplianceApi.md#addAddressRegistryVaultOptOuts) | **POST** /address_registry/vaults | Add vault accounts to the address registry opt-out list *ComplianceApi* | [**assignVaultsToLegalEntity**](docs/ComplianceApi.md#assignVaultsToLegalEntity) | **POST** /legal_entities/{legalEntityId}/vaults | Assign vault accounts to a legal entity +*ComplianceApi* | [**createAddressRegistryProofOfOwnership**](docs/ComplianceApi.md#createAddressRegistryProofOfOwnership) | **POST** /address_registry/proof_of_ownership_exports | Create a Proof of Ownership PDF for an address *ComplianceApi* | [**createCounterpartyGroup**](docs/ComplianceApi.md#createCounterpartyGroup) | **POST** /counterparty_groups | Create a counterparty group *ComplianceApi* | [**deactivateArsConfig**](docs/ComplianceApi.md#deactivateArsConfig) | **POST** /screening/ars/config/deactivate | Deactivate ARS (Address Registry Screening) *ComplianceApi* | [**deactivateByorkConfig**](docs/ComplianceApi.md#deactivateByorkConfig) | **POST** /screening/byork/config/deactivate | Deactivate BYORK Light @@ -209,26 +210,28 @@ Class | Method | HTTP request | Description *ComplianceApi* | [**updateLegalEntity**](docs/ComplianceApi.md#updateLegalEntity) | **PUT** /legal_entities/{legalEntityId} | Update legal entity *ComplianceApi* | [**updateScreeningConfiguration**](docs/ComplianceApi.md#updateScreeningConfiguration) | **PUT** /screening/configurations | Tenant - Screening Configuration *ComplianceApi* | [**updateTravelRuleConfig**](docs/ComplianceApi.md#updateTravelRuleConfig) | **PUT** /screening/travel_rule/policy_configuration | Update Travel Rule Configuration +*ComplianceApi* | [**verifyAddressRegistryProofOfOwnership**](docs/ComplianceApi.md#verifyAddressRegistryProofOfOwnership) | **POST** /address_registry/proof_of_ownership_exports/verify | Verify a Proof of Ownership export *ComplianceOrchestratorBetaApi* | [**getScreeningResult**](docs/ComplianceOrchestratorBetaApi.md#getScreeningResult) | **GET** /compliance/orchestrator/screenings/{screeningId} | Get a Compliance Orchestrator screening's result *ComplianceOrchestratorBetaApi* | [**getWorkflow**](docs/ComplianceOrchestratorBetaApi.md#getWorkflow) | **GET** /compliance/orchestrator/workflows/{workflowId} | Get a Compliance Orchestrator workflow *ComplianceOrchestratorBetaApi* | [**triggerScreening**](docs/ComplianceOrchestratorBetaApi.md#triggerScreening) | **POST** /compliance/orchestrator/screenings | Trigger a Compliance Orchestrator screening *ComplianceOrchestratorBetaApi* | [**updateWorkflowStatus**](docs/ComplianceOrchestratorBetaApi.md#updateWorkflowStatus) | **PATCH** /compliance/orchestrator/workflows/{workflowId}/status | Update a Compliance Orchestrator workflow's status *ComplianceScreeningConfigurationApi* | [**getAmlScreeningConfiguration**](docs/ComplianceScreeningConfigurationApi.md#getAmlScreeningConfiguration) | **GET** /screening/aml/policy_configuration | Get AML Screening Policy Configuration *ComplianceScreeningConfigurationApi* | [**getScreeningConfiguration**](docs/ComplianceScreeningConfigurationApi.md#getScreeningConfiguration) | **GET** /screening/travel_rule/policy_configuration | Get Travel Rule Screening Policy Configuration -*ConnectedAccountsBetaApi* | [**addConnectedAccount**](docs/ConnectedAccountsBetaApi.md#addConnectedAccount) | **POST** /connected_accounts | Add a connected account -*ConnectedAccountsBetaApi* | [**disconnectConnectedAccount**](docs/ConnectedAccountsBetaApi.md#disconnectConnectedAccount) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account -*ConnectedAccountsBetaApi* | [**getConnectedAccount**](docs/ConnectedAccountsBetaApi.md#getConnectedAccount) | **GET** /connected_accounts/{accountId} | Get connected account -*ConnectedAccountsBetaApi* | [**getConnectedAccountAllowlist**](docs/ConnectedAccountsBetaApi.md#getConnectedAccountAllowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account -*ConnectedAccountsBetaApi* | [**getConnectedAccountAllowlistEntry**](docs/ConnectedAccountsBetaApi.md#getConnectedAccountAllowlistEntry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account -*ConnectedAccountsBetaApi* | [**getConnectedAccountBalances**](docs/ConnectedAccountsBetaApi.md#getConnectedAccountBalances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account -*ConnectedAccountsBetaApi* | [**getConnectedAccountRates**](docs/ConnectedAccountsBetaApi.md#getConnectedAccountRates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account -*ConnectedAccountsBetaApi* | [**getConnectedAccountTradingPairs**](docs/ConnectedAccountsBetaApi.md#getConnectedAccountTradingPairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account -*ConnectedAccountsBetaApi* | [**getConnectedAccounts**](docs/ConnectedAccountsBetaApi.md#getConnectedAccounts) | **GET** /connected_accounts | Get connected accounts -*ConnectedAccountsBetaApi* | [**getConnectedAccountsCredentialsPublicKey**](docs/ConnectedAccountsBetaApi.md#getConnectedAccountsCredentialsPublicKey) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials -*ConnectedAccountsBetaApi* | [**renameConnectedAccount**](docs/ConnectedAccountsBetaApi.md#renameConnectedAccount) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account -*ConnectedAccountsBetaApi* | [**syncConnectedAccountAllowlist**](docs/ConnectedAccountsBetaApi.md#syncConnectedAccountAllowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account -*ConnectedAccountsBetaApi* | [**updateConnectedAccountCredentials**](docs/ConnectedAccountsBetaApi.md#updateConnectedAccountCredentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials +*ConnectedAccountsApi* | [**addConnectedAccount**](docs/ConnectedAccountsApi.md#addConnectedAccount) | **POST** /connected_accounts | Add a connected account +*ConnectedAccountsApi* | [**disconnectConnectedAccount**](docs/ConnectedAccountsApi.md#disconnectConnectedAccount) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account +*ConnectedAccountsApi* | [**getConnectedAccount**](docs/ConnectedAccountsApi.md#getConnectedAccount) | **GET** /connected_accounts/{accountId} | Get connected account +*ConnectedAccountsApi* | [**getConnectedAccountAllowlist**](docs/ConnectedAccountsApi.md#getConnectedAccountAllowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account +*ConnectedAccountsApi* | [**getConnectedAccountAllowlistEntry**](docs/ConnectedAccountsApi.md#getConnectedAccountAllowlistEntry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account +*ConnectedAccountsApi* | [**getConnectedAccountBalances**](docs/ConnectedAccountsApi.md#getConnectedAccountBalances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account +*ConnectedAccountsApi* | [**getConnectedAccountRates**](docs/ConnectedAccountsApi.md#getConnectedAccountRates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account +*ConnectedAccountsApi* | [**getConnectedAccountTradingPairs**](docs/ConnectedAccountsApi.md#getConnectedAccountTradingPairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account +*ConnectedAccountsApi* | [**getConnectedAccounts**](docs/ConnectedAccountsApi.md#getConnectedAccounts) | **GET** /connected_accounts | Get connected accounts +*ConnectedAccountsApi* | [**getConnectedAccountsCredentialsPublicKey**](docs/ConnectedAccountsApi.md#getConnectedAccountsCredentialsPublicKey) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials +*ConnectedAccountsApi* | [**renameConnectedAccount**](docs/ConnectedAccountsApi.md#renameConnectedAccount) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account +*ConnectedAccountsApi* | [**syncConnectedAccountAllowlist**](docs/ConnectedAccountsApi.md#syncConnectedAccountAllowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account +*ConnectedAccountsApi* | [**updateConnectedAccountCredentials**](docs/ConnectedAccountsApi.md#updateConnectedAccountCredentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials *ConsoleUserApi* | [**createConsoleUser**](docs/ConsoleUserApi.md#createConsoleUser) | **POST** /management/users | Create console user +*ConsoleUserApi* | [**deleteConsoleUser**](docs/ConsoleUserApi.md#deleteConsoleUser) | **DELETE** /management/users/{id} | Request deletion of a console user *ConsoleUserApi* | [**getConsoleUsers**](docs/ConsoleUserApi.md#getConsoleUsers) | **GET** /management/users | Get console users *ContactsApi* | [**getContacts**](docs/ContactsApi.md#getContacts) | **GET** /contacts | List contacts *ContractInteractionsApi* | [**decodeContractData**](docs/ContractInteractionsApi.md#decodeContractData) | **POST** /contract_interactions/base_asset_id/{baseAssetId}/contract_address/{contractAddress}/decode | Decode a function call data, error, or event log @@ -543,8 +546,12 @@ Class | Method | HTTP request | Description *UserGroupsBetaApi* | [**getUserGroups**](docs/UserGroupsBetaApi.md#getUserGroups) | **GET** /management/user_groups | List user groups *UserGroupsBetaApi* | [**updateUserGroup**](docs/UserGroupsBetaApi.md#updateUserGroup) | **PUT** /management/user_groups/{groupId} | Update user group *UsersApi* | [**getUsers**](docs/UsersApi.md#getUsers) | **GET** /users | List users +*UtxoManagementBetaApi* | [**getUtxoSelectionConfig**](docs/UtxoManagementBetaApi.md#getUtxoSelectionConfig) | **GET** /utxo_management/selection_config | Get UTXO selection config *UtxoManagementBetaApi* | [**getUtxos**](docs/UtxoManagementBetaApi.md#getUtxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) +*UtxoManagementBetaApi* | [**getVaultAssetUtxoSelectionConfig**](docs/UtxoManagementBetaApi.md#getVaultAssetUtxoSelectionConfig) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config *UtxoManagementBetaApi* | [**updateUtxoLabels**](docs/UtxoManagementBetaApi.md#updateUtxoLabels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs +*UtxoManagementBetaApi* | [**upsertUtxoSelectionConfig**](docs/UtxoManagementBetaApi.md#upsertUtxoSelectionConfig) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config +*UtxoManagementBetaApi* | [**upsertVaultAssetUtxoSelectionConfig**](docs/UtxoManagementBetaApi.md#upsertVaultAssetUtxoSelectionConfig) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config *VaultsApi* | [**activateAssetForVaultAccount**](docs/VaultsApi.md#activateAssetForVaultAccount) | **POST** /vault/accounts/{vaultAccountId}/{assetId}/activate | Activate a wallet in a vault account *VaultsApi* | [**activateUsdcGatewayWalletBeta**](docs/VaultsApi.md#activateUsdcGatewayWalletBeta) | **POST** /vault/accounts/{vaultAccountId}/usdc_gateway/activate | Activate a USDC Gateway wallet *VaultsApi* | [**attachOrDetachTagsFromVaultAccounts**](docs/VaultsApi.md#attachOrDetachTagsFromVaultAccounts) | **POST** /vault/accounts/attached_tags | Attach or detach tags from vault accounts @@ -590,8 +597,10 @@ Class | Method | HTTP request | Description *WebhooksApi* | [**resendTransactionWebhooks**](docs/WebhooksApi.md#resendTransactionWebhooks) | **POST** /webhooks/resend/{txId} | Resend webhooks for a transaction by ID *WebhooksApi* | [**resendWebhooks**](docs/WebhooksApi.md#resendWebhooks) | **POST** /webhooks/resend | Resend failed webhooks *WebhooksV2Api* | [**createWebhook**](docs/WebhooksV2Api.md#createWebhook) | **POST** /webhooks | Create a new webhook +*WebhooksV2Api* | [**createWebhookMtlsConfig**](docs/WebhooksV2Api.md#createWebhookMtlsConfig) | **POST** /webhooks_settings/mtls | Create an mTLS configuration *WebhooksV2Api* | [**createWebhookOauth**](docs/WebhooksV2Api.md#createWebhookOauth) | **POST** /webhooks_settings/oauth | Create OAuth credentials *WebhooksV2Api* | [**deleteWebhook**](docs/WebhooksV2Api.md#deleteWebhook) | **DELETE** /webhooks/{webhookId} | Delete webhook +*WebhooksV2Api* | [**deleteWebhookMtlsConfig**](docs/WebhooksV2Api.md#deleteWebhookMtlsConfig) | **DELETE** /webhooks_settings/mtls/{webhookMtlsId} | Delete an mTLS configuration *WebhooksV2Api* | [**deleteWebhookOauth**](docs/WebhooksV2Api.md#deleteWebhookOauth) | **DELETE** /webhooks_settings/oauth/{webhookOauthId} | Delete OAuth credentials *WebhooksV2Api* | [**getMetrics**](docs/WebhooksV2Api.md#getMetrics) | **GET** /webhooks/{webhookId}/metrics/{metricName} | Get webhook metrics *WebhooksV2Api* | [**getMtlsCsr**](docs/WebhooksV2Api.md#getMtlsCsr) | **GET** /webhooks_settings/mtls_csr | Get mTLS CSR @@ -601,6 +610,8 @@ Class | Method | HTTP request | Description *WebhooksV2Api* | [**getResendByQueryJobStatus**](docs/WebhooksV2Api.md#getResendByQueryJobStatus) | **GET** /webhooks/{webhookId}/notifications/resend_by_query/jobs/{jobId} | Get resend by query job status *WebhooksV2Api* | [**getResendJobStatus**](docs/WebhooksV2Api.md#getResendJobStatus) | **GET** /webhooks/{webhookId}/notifications/resend_failed/jobs/{jobId} | Get resend job status *WebhooksV2Api* | [**getWebhook**](docs/WebhooksV2Api.md#getWebhook) | **GET** /webhooks/{webhookId} | Get webhook by id +*WebhooksV2Api* | [**getWebhookMtlsConfig**](docs/WebhooksV2Api.md#getWebhookMtlsConfig) | **GET** /webhooks_settings/mtls/{webhookMtlsId} | Get an mTLS configuration by id +*WebhooksV2Api* | [**getWebhookMtlsConfigs**](docs/WebhooksV2Api.md#getWebhookMtlsConfigs) | **GET** /webhooks_settings/mtls | List the uploaded mTLS configurations *WebhooksV2Api* | [**getWebhookOauth**](docs/WebhooksV2Api.md#getWebhookOauth) | **GET** /webhooks_settings/oauth/{webhookOauthId} | Get OAuth credentials by id *WebhooksV2Api* | [**getWebhookOauths**](docs/WebhooksV2Api.md#getWebhookOauths) | **GET** /webhooks_settings/oauth | Get all OAuth credentials *WebhooksV2Api* | [**getWebhooks**](docs/WebhooksV2Api.md#getWebhooks) | **GET** /webhooks | Get all webhooks @@ -609,6 +620,7 @@ Class | Method | HTTP request | Description *WebhooksV2Api* | [**resendNotificationsByQuery**](docs/WebhooksV2Api.md#resendNotificationsByQuery) | **POST** /webhooks/{webhookId}/notifications/resend_by_query | Resend notifications by query *WebhooksV2Api* | [**resendNotificationsByResourceId**](docs/WebhooksV2Api.md#resendNotificationsByResourceId) | **POST** /webhooks/{webhookId}/notifications/resend_by_resource | Resend notifications by resource Id *WebhooksV2Api* | [**updateWebhook**](docs/WebhooksV2Api.md#updateWebhook) | **PATCH** /webhooks/{webhookId} | Update webhook +*WebhooksV2Api* | [**updateWebhookMtlsConfig**](docs/WebhooksV2Api.md#updateWebhookMtlsConfig) | **PATCH** /webhooks_settings/mtls/{webhookMtlsId} | Update an mTLS configuration *WebhooksV2Api* | [**updateWebhookOauth**](docs/WebhooksV2Api.md#updateWebhookOauth) | **PATCH** /webhooks_settings/oauth/{webhookOauthId} | Update OAuth credentials *WhitelistIpAddressesApi* | [**getWhitelistIpAddresses**](docs/WhitelistIpAddressesApi.md#getWhitelistIpAddresses) | **GET** /management/api_users/{userId}/whitelist_ip_addresses | Get whitelisted ip addresses for an API Key *WorkspaceApi* | [**getWorkspace**](docs/WorkspaceApi.md#getWorkspace) | **GET** /workspace | Get workspace @@ -668,16 +680,18 @@ Class | Method | HTTP request | Description - [AddressRegistryAddVaultOptOutsRequest](docs/AddressRegistryAddVaultOptOutsRequest.md) - [AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner](docs/AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner.md) - [AddressRegistryAddVaultOptOutsResponse](docs/AddressRegistryAddVaultOptOutsResponse.md) - - [AddressRegistryError](docs/AddressRegistryError.md) + - [AddressRegistryCreateProofOfOwnershipRequest](docs/AddressRegistryCreateProofOfOwnershipRequest.md) + - [AddressRegistryCreateProofOfOwnershipResponse](docs/AddressRegistryCreateProofOfOwnershipResponse.md) - [AddressRegistryGetVaultOptOutResponse](docs/AddressRegistryGetVaultOptOutResponse.md) - [AddressRegistryLegalEntity](docs/AddressRegistryLegalEntity.md) - [AddressRegistryListVaultOptOutsResponse](docs/AddressRegistryListVaultOptOutsResponse.md) - [AddressRegistryRemoveAllVaultOptOutsResponse](docs/AddressRegistryRemoveAllVaultOptOutsResponse.md) - [AddressRegistryRemoveVaultOptOutResponse](docs/AddressRegistryRemoveVaultOptOutResponse.md) - [AddressRegistryTenantRegistryResponse](docs/AddressRegistryTenantRegistryResponse.md) - - [AddressRegistryTravelRuleProvider](docs/AddressRegistryTravelRuleProvider.md) - [AddressRegistryVaultListOrder](docs/AddressRegistryVaultListOrder.md) - [AddressRegistryVaultOptOutItem](docs/AddressRegistryVaultOptOutItem.md) + - [AddressRegistryVerifyProofOfOwnershipRequest](docs/AddressRegistryVerifyProofOfOwnershipRequest.md) + - [AddressRegistryVerifyProofOfOwnershipResponse](docs/AddressRegistryVerifyProofOfOwnershipResponse.md) - [AddressReverseLookupResponse](docs/AddressReverseLookupResponse.md) - [AddressesFilters](docs/AddressesFilters.md) - [AlertExposureTypeEnum](docs/AlertExposureTypeEnum.md) @@ -804,11 +818,17 @@ Class | Method | HTTP request | Description - [CantonCallAllocationWithdraw](docs/CantonCallAllocationWithdraw.md) - [CantonCallAllowListAdd](docs/CantonCallAllowListAdd.md) - [CantonCallAllowListRemove](docs/CantonCallAllowListRemove.md) + - [CantonCallDetails](docs/CantonCallDetails.md) - [CantonCallEndInvestorInvite](docs/CantonCallEndInvestorInvite.md) - [CantonCallEndInvestorInviteCancel](docs/CantonCallEndInvestorInviteCancel.md) - [CantonCallEndInvestorOffboard](docs/CantonCallEndInvestorOffboard.md) - [CantonCallParticipantOnboarding](docs/CantonCallParticipantOnboarding.md) - [CantonCallTransferWithdraw](docs/CantonCallTransferWithdraw.md) + - [CantonDetails](docs/CantonDetails.md) + - [CantonDomainEnum](docs/CantonDomainEnum.md) + - [CantonOfferResponseDetails](docs/CantonOfferResponseDetails.md) + - [CantonSettlementDetails](docs/CantonSettlementDetails.md) + - [CantonVendorEnum](docs/CantonVendorEnum.md) - [ChainDescriptor](docs/ChainDescriptor.md) - [ChainInfoResponse](docs/ChainInfoResponse.md) - [ChannelDvnConfigWithConfirmations](docs/ChannelDvnConfigWithConfirmations.md) @@ -952,6 +972,7 @@ Class | Method | HTTP request | Description - [CreateVaultAccountRequest](docs/CreateVaultAccountRequest.md) - [CreateVaultAssetResponse](docs/CreateVaultAssetResponse.md) - [CreateWalletRequest](docs/CreateWalletRequest.md) + - [CreateWebhookMtlsConfigRequest](docs/CreateWebhookMtlsConfigRequest.md) - [CreateWebhookOauthRequest](docs/CreateWebhookOauthRequest.md) - [CreateWebhookRequest](docs/CreateWebhookRequest.md) - [CreateWorkflowExecutionRequestParamsInner](docs/CreateWorkflowExecutionRequestParamsInner.md) @@ -966,6 +987,7 @@ Class | Method | HTTP request | Description - [DelegationSummary](docs/DelegationSummary.md) - [DeleteNetworkConnectionResponse](docs/DeleteNetworkConnectionResponse.md) - [DeleteNetworkIdResponse](docs/DeleteNetworkIdResponse.md) + - [DeleteWebhookMtlsConfigResponse](docs/DeleteWebhookMtlsConfigResponse.md) - [DeleteWebhookOauthResponse](docs/DeleteWebhookOauthResponse.md) - [DeployLayerZeroAdaptersRequest](docs/DeployLayerZeroAdaptersRequest.md) - [DeployableAddressResponse](docs/DeployableAddressResponse.md) @@ -1013,6 +1035,7 @@ Class | Method | HTTP request | Description - [EarnMetadata](docs/EarnMetadata.md) - [EarnProvider](docs/EarnProvider.md) - [EditGasStationConfigurationResponse](docs/EditGasStationConfigurationResponse.md) + - [EffectiveUtxoSelectionConfig](docs/EffectiveUtxoSelectionConfig.md) - [EmbeddedWallet](docs/EmbeddedWallet.md) - [EmbeddedWalletAccount](docs/EmbeddedWalletAccount.md) - [EmbeddedWalletAddressDetails](docs/EmbeddedWalletAddressDetails.md) @@ -1091,6 +1114,7 @@ Class | Method | HTTP request | Description - [FixedAmountTypeEnum](docs/FixedAmountTypeEnum.md) - [FixedFee](docs/FixedFee.md) - [FlowDirection](docs/FlowDirection.md) + - [FokTimeInForce](docs/FokTimeInForce.md) - [FpsHkAddress](docs/FpsHkAddress.md) - [FpsHkDestination](docs/FpsHkDestination.md) - [FpsHkPaymentInfo](docs/FpsHkPaymentInfo.md) @@ -1207,6 +1231,10 @@ Class | Method | HTTP request | Description - [LegacySrcOrDestAttributesInner](docs/LegacySrcOrDestAttributesInner.md) - [LegalEntityRegistration](docs/LegalEntityRegistration.md) - [LeiStatus](docs/LeiStatus.md) + - [LimitExecutionRequestDetails](docs/LimitExecutionRequestDetails.md) + - [LimitExecutionResponseDetails](docs/LimitExecutionResponseDetails.md) + - [LimitTypeDetails](docs/LimitTypeDetails.md) + - [LimitTypeEnum](docs/LimitTypeEnum.md) - [LinkedTokensCount](docs/LinkedTokensCount.md) - [ListApprovalApiKeysResponse](docs/ListApprovalApiKeysResponse.md) - [ListApprovalsResponse](docs/ListApprovalsResponse.md) @@ -1366,6 +1394,8 @@ Class | Method | HTTP request | Description - [Position](docs/Position.md) - [Position2](docs/Position2.md) - [PositionRelatedTransaction](docs/PositionRelatedTransaction.md) + - [PostTradeSettlement](docs/PostTradeSettlement.md) + - [PostTradeSettlementType](docs/PostTradeSettlementType.md) - [PostalAddress](docs/PostalAddress.md) - [PreScreening](docs/PreScreening.md) - [PrefundedSettlement](docs/PrefundedSettlement.md) @@ -1842,10 +1872,12 @@ Class | Method | HTTP request | Description - [UpdateTokenOwnershipStatusDto](docs/UpdateTokenOwnershipStatusDto.md) - [UpdateVaultAccountAssetAddressRequest](docs/UpdateVaultAccountAssetAddressRequest.md) - [UpdateVaultAccountRequest](docs/UpdateVaultAccountRequest.md) + - [UpdateWebhookMtlsConfigRequest](docs/UpdateWebhookMtlsConfigRequest.md) - [UpdateWebhookOauthRequest](docs/UpdateWebhookOauthRequest.md) - [UpdateWebhookRequest](docs/UpdateWebhookRequest.md) - [UpdateWorkflowStatusRequest](docs/UpdateWorkflowStatusRequest.md) - [UpdateWorkflowStatusResponse](docs/UpdateWorkflowStatusResponse.md) + - [UpsertUtxoSelectionConfigRequest](docs/UpsertUtxoSelectionConfigRequest.md) - [UsWirePaymentInfo](docs/UsWirePaymentInfo.md) - [UsdcGatewayWalletAsset](docs/UsdcGatewayWalletAsset.md) - [UsdcGatewayWalletInfoResponse](docs/UsdcGatewayWalletInfoResponse.md) @@ -1862,9 +1894,15 @@ Class | Method | HTTP request | Description - [UtxoInput](docs/UtxoInput.md) - [UtxoInput2](docs/UtxoInput2.md) - [UtxoInputSelection](docs/UtxoInputSelection.md) + - [UtxoLabelFailure](docs/UtxoLabelFailure.md) + - [UtxoLabelsErrorResponse](docs/UtxoLabelsErrorResponse.md) - [UtxoOutput](docs/UtxoOutput.md) + - [UtxoSelectionConfigEntry](docs/UtxoSelectionConfigEntry.md) + - [UtxoSelectionConfigResponse](docs/UtxoSelectionConfigResponse.md) + - [UtxoSelectionConfigSourceEnum](docs/UtxoSelectionConfigSourceEnum.md) - [UtxoSelectionFilters](docs/UtxoSelectionFilters.md) - [UtxoSelectionParams](docs/UtxoSelectionParams.md) + - [UtxoSelectionStrategyEnum](docs/UtxoSelectionStrategyEnum.md) - [ValidateAddressResponse](docs/ValidateAddressResponse.md) - [ValidateLayerZeroChannelResponse](docs/ValidateLayerZeroChannelResponse.md) - [ValidationKeyDto](docs/ValidationKeyDto.md) @@ -1888,7 +1926,7 @@ Class | Method | HTTP request | Description - [Webhook](docs/Webhook.md) - [WebhookEvent](docs/WebhookEvent.md) - [WebhookMetric](docs/WebhookMetric.md) - - [WebhookMtls](docs/WebhookMtls.md) + - [WebhookMtlsConfig](docs/WebhookMtlsConfig.md) - [WebhookMtlsCsrResponse](docs/WebhookMtlsCsrResponse.md) - [WebhookMtlsKeyAlgorithm](docs/WebhookMtlsKeyAlgorithm.md) - [WebhookOauthCredentials](docs/WebhookOauthCredentials.md) diff --git a/api/openapi.yaml b/api/openapi.yaml index f4457d5f..1e7ede32 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -2549,7 +2549,9 @@ paths: description: |- Submits one Canton call. `type` names the call and selects the shape of `payload`. An unknown or missing `type`, or a `payload` missing a required field, is a `400`. A field that does not belong to the selected `type` is ignored rather than rejected. - Four types are specified but not available in v1 and return `501`: `DTCC_END_INVESTOR_INVITE_CANCEL`, `DTCC_END_INVESTOR_OFFBOARD`, `DTCC_ALLOW_LIST_ADD`, `DTCC_ALLOW_LIST_REMOVE`. `TRANSFER_WITHDRAW` has no owning service at all. + A `501` has two different causes, and the distinction is permanent rather than a build-order detail, so it belongs in the published spec: + NO CANTON CAPABILITY — specified so the contract is complete, but not available in v1: `DTCC_END_INVESTOR_INVITE_CANCEL`, `DTCC_END_INVESTOR_OFFBOARD`, `DTCC_ALLOW_LIST_ADD`, `DTCC_ALLOW_LIST_REMOVE`. `TRANSFER_WITHDRAW` has no owning service at all. NO HANDLER YET — the capability exists and the type is being wired one slice at a time. + `ALLOCATION_WITHDRAW` is implemented and answers `201` / `400` / `404` / `409`. operationId: createCantonCall parameters: - description: "A unique identifier for the request. If the request is sent\ @@ -2631,9 +2633,9 @@ paths: /operations/canton/offers/{offerId}/responses: post: description: |- - ONE endpoint for every offer domain. Two layers of discrimination, nested: `domain` selects `response`, and inside `response` the `responseType` selects the variant. Both layers are closed, so an onboarding response type sent under `domain: ALLOCATIONS` is a `400`. + ONE endpoint for every offer domain. Two layers of discrimination, nested: `domain` selects `response`, and inside `response` the `responseType` selects the variant. Both layers are closed, so an onboarding response type sent under `domain: ALLOCATION` is a `400`. {"domain":"ONBOARDING","response":{"responseType":"DTCC_…_REJECT","reason":"KYC"}} - `domain: TRANSFERS` is declared so the endpoint covers every offer domain. Transfer responses are not available yet — the domain is part of the contract, not of v1's behaviour. + `domain: TRANSFER` is declared so the endpoint covers every offer domain. Transfer responses are not available yet — the domain is part of the contract, not of v1's behaviour. operationId: respondToCantonOffer parameters: - description: The Fireblocks transaction id of the incoming offer being answered. @@ -2697,8 +2699,8 @@ paths: application/json: schema: $ref: "#/components/schemas/ErrorSchema" - description: "The responseType is not currently in availableResponses —\ - \ already answered, expired, or a response is in flight" + description: "The offer is not answerable — already answered, expired, or\ + \ a response is in flight" headers: X-Request-ID: $ref: "#/components/headers/X-Request-ID" @@ -2751,12 +2753,20 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AddressRegistryError" - description: "Bad request — either request validation (path `{address}`\ - \ empty or whitespace-only after trim, e.g. encoded spaces only; numeric\ - \ code 4100), or the authenticated workspace is not opted in to the address\ - \ registry (numeric code 2140). The `message` field describes the failure;\ - \ use `code` to distinguish." + $ref: "#/components/schemas/ErrorSchema" + description: | + - `{address}` empty or whitespace-only after trim. Error code 4100. + - Workspace not opted in to the address registry. Error code 2140. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: This workspace is blocked from Address Registry public lookup. + Error code 2146. headers: X-Request-ID: $ref: "#/components/headers/X-Request-ID" @@ -2764,10 +2774,18 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AddressRegistryError" - description: "Not found (error code 2142) — unresolved address, no legal\ - \ entity for a resolved address, or the same not-found outcome in other\ - \ cases." + $ref: "#/components/schemas/ErrorSchema" + description: "Address not found, owner not opted in, or legal entity not\ + \ usable for lookup. Error code 2142." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "429": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: Rate limited. Error code 2145. Retry-safe after backing off. headers: X-Request-ID: $ref: "#/components/headers/X-Request-ID" @@ -2801,6 +2819,218 @@ paths: source: response = fireblocks.compliance.get_legal_entity_for_address(address); x-accepts: - application/json + /address_registry/proof_of_ownership_exports: + post: + description: |- + Creates a Proof of Ownership PDF for a blockchain address owned by the authenticated workspace — for example, to share with a counterparty or bank as compliance evidence. Recipients can confirm it with `POST /v1/address_registry/proof_of_ownership_exports/verify`. + + Check `proofOfOwnershipAvailable` on `GET /v1/address_registry/legal_entities/{address}` first if you want to know whether create is likely to succeed. + operationId: createAddressRegistryProofOfOwnership + parameters: + - description: "A unique identifier for the request. If the request is sent\ + \ multiple times with the same idempotency key, the server will return the\ + \ same response as the first request. The idempotency key is valid for 24\ + \ hours." + explode: false + in: header + name: Idempotency-Key + required: false + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/AddressRegistryCreateProofOfOwnershipRequest" + required: true + responses: + "201": + content: + application/json: + schema: + $ref: "#/components/schemas/AddressRegistryCreateProofOfOwnershipResponse" + description: PDF export created + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: | + - Missing, empty, or whitespace-only `address`. Error code 4100. + - Workspace not opted in to the address registry. Error code 2140. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: This workspace is blocked from creating Proof of Ownership + exports. Error code 2146. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "Address not found, not owned by this workspace, or not usable\ + \ for export. Error code 2142." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "429": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: Rate limited. Error code 2145. Retry-safe after backing off. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "500": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: Internal error. No PDF is returned. Not retry-safe. Error code + 2143. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "503": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: Rate-limit infrastructure temporarily unavailable. Safe to + retry with backoff. Error code 2143 — same as the 500 case; use the HTTP + status to tell them apart. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Create a Proof of Ownership PDF for an address + tags: + - Compliance + x-rate-limit-category: high_compute + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.compliance.createAddressRegistryProofOfOwnership(complianceApiCreateAddressRegistryProofOfOwnershipRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture>\ + \ response = fireblocks.compliance().createAddressRegistryProofOfOwnership(addressRegistryCreateProofOfOwnershipRequest,\ + \ idempotencyKey);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.compliance.create_address_registry_proof_of_ownership(address_registry_create_proof_of_ownership_request,\ + \ idempotency_key);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.compliance.createAddressRegistryProofOfOwnership(complianceApiCreateAddressRegistryProofOfOwnershipRequest);" + - lang: Java + source: "CompletableFuture>\ + \ response = fireblocks.compliance().createAddressRegistryProofOfOwnership(addressRegistryCreateProofOfOwnershipRequest,\ + \ idempotencyKey);" + - lang: Python + source: "response = fireblocks.compliance.create_address_registry_proof_of_ownership(address_registry_create_proof_of_ownership_request,\ + \ idempotency_key);" + x-content-type: application/json + x-accepts: + - application/json + /address_registry/proof_of_ownership_exports/verify: + post: + description: "Verifies a Proof of Ownership export against the record Fireblocks\ + \ stored at creation. Returns `valid: false` (not 404) for an unknown, expired,\ + \ or mismatched export. Available to any authenticated Fireblocks workspace,\ + \ not just the export's original owner." + operationId: verifyAddressRegistryProofOfOwnership + parameters: + - description: "A unique identifier for the request. If the request is sent\ + \ multiple times with the same idempotency key, the server will return the\ + \ same response as the first request. The idempotency key is valid for 24\ + \ hours." + explode: false + in: header + name: Idempotency-Key + required: false + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/AddressRegistryVerifyProofOfOwnershipRequest" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/AddressRegistryVerifyProofOfOwnershipResponse" + description: Verification result + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "Missing, empty, or whitespace-only `exportId`, `verificationHash`,\ + \ or `address`, or `expiresAt` not empty and not a valid `YYYY-MM-DD`\ + \ date. Error code 4100." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Verify a Proof of Ownership export + tags: + - Compliance + x-rate-limit-category: read + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.compliance.verifyAddressRegistryProofOfOwnership(complianceApiVerifyAddressRegistryProofOfOwnershipRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture>\ + \ response = fireblocks.compliance().verifyAddressRegistryProofOfOwnership(addressRegistryVerifyProofOfOwnershipRequest,\ + \ idempotencyKey);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.compliance.verify_address_registry_proof_of_ownership(address_registry_verify_proof_of_ownership_request,\ + \ idempotency_key);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.compliance.verifyAddressRegistryProofOfOwnership(complianceApiVerifyAddressRegistryProofOfOwnershipRequest);" + - lang: Java + source: "CompletableFuture>\ + \ response = fireblocks.compliance().verifyAddressRegistryProofOfOwnership(addressRegistryVerifyProofOfOwnershipRequest,\ + \ idempotencyKey);" + - lang: Python + source: "response = fireblocks.compliance.verify_address_registry_proof_of_ownership(address_registry_verify_proof_of_ownership_request,\ + \ idempotency_key);" + x-content-type: application/json + x-accepts: + - application/json /address_registry/tenant: delete: description: Opts the workspace out. No request body. Response uses the same @@ -3044,7 +3274,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AddressRegistryError" + $ref: "#/components/schemas/ErrorSchema" description: Validation error (e.g. invalid or malformed pageCursor) headers: X-Request-ID: @@ -3119,7 +3349,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AddressRegistryError" + $ref: "#/components/schemas/ErrorSchema" description: Validation error (e.g. empty list or invalid vault ids) headers: X-Request-ID: @@ -3192,7 +3422,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AddressRegistryError" + $ref: "#/components/schemas/ErrorSchema" description: Invalid path parameter (e.g. negative or out-of-range vault account id) headers: @@ -3259,7 +3489,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AddressRegistryError" + $ref: "#/components/schemas/ErrorSchema" description: Invalid path parameter (e.g. negative or out-of-range vault account id) headers: @@ -5857,8 +6087,6 @@ paths: get: description: | Returns all connected accounts. - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: getConnectedAccounts parameters: - description: Whether to include only main accounts in the response. @@ -5902,33 +6130,33 @@ paths: $ref: "#/components/responses/Error" summary: Get connected accounts tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: query x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccounts(connectedAccountsBetaApiGetConnectedAccountsRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccounts(connectedAccountsApiGetConnectedAccountsRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().getConnectedAccounts(mainAccounts,\ + \ = fireblocks.connectedAccounts().getConnectedAccounts(mainAccounts,\ \ pageSize, pageCursor);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.get_connected_accounts(main_accounts,\ + code: "response = fireblocks.connected_accounts.get_connected_accounts(main_accounts,\ \ page_size, page_cursor);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccounts(connectedAccountsBetaApiGetConnectedAccountsRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccounts(connectedAccountsApiGetConnectedAccountsRequest);" - lang: Java source: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().getConnectedAccounts(mainAccounts,\ - \ pageSize, pageCursor);" + \ = fireblocks.connectedAccounts().getConnectedAccounts(mainAccounts, pageSize,\ + \ pageCursor);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.get_connected_accounts(main_accounts,\ + source: "response = fireblocks.connected_accounts.get_connected_accounts(main_accounts,\ \ page_size, page_cursor);" x-accepts: - application/json @@ -5942,8 +6170,6 @@ paths: The `providerType` is derived server-side from the `providerId` — callers do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: addConnectedAccount parameters: - description: "A unique identifier for the request. If the request is sent\ @@ -6023,33 +6249,33 @@ paths: $ref: "#/components/responses/Error" summary: Add a connected account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: write x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.addConnectedAccount(connectedAccountsBetaApiAddConnectedAccountRequest);" + \ = fireblocks.connectedAccounts.addConnectedAccount(connectedAccountsApiAddConnectedAccountRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().addConnectedAccount(addConnectedAccountRequest,\ + \ = fireblocks.connectedAccounts().addConnectedAccount(addConnectedAccountRequest,\ \ idempotencyKey);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.add_connected_account(add_connected_account_request,\ + code: "response = fireblocks.connected_accounts.add_connected_account(add_connected_account_request,\ \ idempotency_key);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.addConnectedAccount(connectedAccountsBetaApiAddConnectedAccountRequest);" + \ = fireblocks.connectedAccounts.addConnectedAccount(connectedAccountsApiAddConnectedAccountRequest);" - lang: Java source: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().addConnectedAccount(addConnectedAccountRequest,\ + \ = fireblocks.connectedAccounts().addConnectedAccount(addConnectedAccountRequest,\ \ idempotencyKey);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.add_connected_account(add_connected_account_request,\ + source: "response = fireblocks.connected_accounts.add_connected_account(add_connected_account_request,\ \ idempotency_key);" x-content-type: application/json x-accepts: @@ -6058,9 +6284,6 @@ paths: delete: description: | Disconnect a connected account by ID. - - **Note**: - - This endpoint is currently in beta and might be subject to changes. operationId: disconnectConnectedAccount parameters: - description: The ID of the account to disconnect. @@ -6082,33 +6305,31 @@ paths: $ref: "#/components/responses/Error" summary: Disconnect connected account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: write x-readme: code-samples: - language: typescript - code: "const response: Promise> = fireblocks.connectedAccountsBeta.disconnectConnectedAccount(connectedAccountsBetaApiDisconnectConnectedAccountRequest);" + code: "const response: Promise> = fireblocks.connectedAccounts.disconnectConnectedAccount(connectedAccountsApiDisconnectConnectedAccountRequest);" name: Fireblocks SDK TypeScript example - language: java - code: CompletableFuture> response = fireblocks.connectedAccountsBeta().disconnectConnectedAccount(accountId); + code: CompletableFuture> response = fireblocks.connectedAccounts().disconnectConnectedAccount(accountId); name: Fireblocks SDK Java example - language: python - code: response = fireblocks.connected_accounts_beta.disconnect_connected_account(account_id); + code: response = fireblocks.connected_accounts.disconnect_connected_account(account_id); name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript - source: "const response: Promise> = fireblocks.connectedAccountsBeta.disconnectConnectedAccount(connectedAccountsBetaApiDisconnectConnectedAccountRequest);" + source: "const response: Promise> = fireblocks.connectedAccounts.disconnectConnectedAccount(connectedAccountsApiDisconnectConnectedAccountRequest);" - lang: Java - source: CompletableFuture> response = fireblocks.connectedAccountsBeta().disconnectConnectedAccount(accountId); + source: CompletableFuture> response = fireblocks.connectedAccounts().disconnectConnectedAccount(accountId); - lang: Python - source: response = fireblocks.connected_accounts_beta.disconnect_connected_account(account_id); + source: response = fireblocks.connected_accounts.disconnect_connected_account(account_id); x-accepts: - application/json get: description: | Retrieve detailed information about a specific connected account by ID. - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: getConnectedAccount parameters: - description: The ID of the account to fetch. @@ -6134,30 +6355,30 @@ paths: $ref: "#/components/responses/Error" summary: Get connected account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: read x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccount(connectedAccountsBetaApiGetConnectedAccountRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccount(connectedAccountsApiGetConnectedAccountRequest);" name: Fireblocks SDK TypeScript example - language: java code: CompletableFuture> response - = fireblocks.connectedAccountsBeta().getConnectedAccount(accountId); + = fireblocks.connectedAccounts().getConnectedAccount(accountId); name: Fireblocks SDK Java example - language: python - code: response = fireblocks.connected_accounts_beta.get_connected_account(account_id); + code: response = fireblocks.connected_accounts.get_connected_account(account_id); name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccount(connectedAccountsBetaApiGetConnectedAccountRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccount(connectedAccountsApiGetConnectedAccountRequest);" - lang: Java source: CompletableFuture> response - = fireblocks.connectedAccountsBeta().getConnectedAccount(accountId); + = fireblocks.connectedAccounts().getConnectedAccount(accountId); - lang: Python - source: response = fireblocks.connected_accounts_beta.get_connected_account(account_id); + source: response = fireblocks.connected_accounts.get_connected_account(account_id); x-accepts: - application/json /connected_accounts/{accountId}/allowlist: @@ -6165,7 +6386,7 @@ paths: description: | Retrieves the address allowlist for a specified connected account. - **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. + **Note:** Currently supports CoinbaseExchange/Binance accounts only. operationId: getConnectedAccountAllowlist parameters: - description: The connected account identifier @@ -6268,31 +6489,31 @@ paths: $ref: "#/components/responses/Error" summary: Get allowlist for connected account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: query x-readme: code-samples: - language: typescript code: "const response: Promise> =\ - \ fireblocks.connectedAccountsBeta.getConnectedAccountAllowlist(connectedAccountsBetaApiGetConnectedAccountAllowlistRequest);" + \ fireblocks.connectedAccounts.getConnectedAccountAllowlist(connectedAccountsApiGetConnectedAccountAllowlistRequest);" name: Fireblocks SDK TypeScript example - language: java - code: "CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountAllowlist(accountId,\ + code: "CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountAllowlist(accountId,\ \ status, assetId, networkId, address, pageCursor, pageSize, order);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.get_connected_account_allowlist(account_id,\ + code: "response = fireblocks.connected_accounts.get_connected_account_allowlist(account_id,\ \ status, asset_id, network_id, address, page_cursor, page_size, order);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise> =\ - \ fireblocks.connectedAccountsBeta.getConnectedAccountAllowlist(connectedAccountsBetaApiGetConnectedAccountAllowlistRequest);" + \ fireblocks.connectedAccounts.getConnectedAccountAllowlist(connectedAccountsApiGetConnectedAccountAllowlistRequest);" - lang: Java - source: "CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountAllowlist(accountId,\ + source: "CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountAllowlist(accountId,\ \ status, assetId, networkId, address, pageCursor, pageSize, order);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.get_connected_account_allowlist(account_id,\ + source: "response = fireblocks.connected_accounts.get_connected_account_allowlist(account_id,\ \ status, asset_id, network_id, address, page_cursor, page_size, order);" x-accepts: - application/json @@ -6301,7 +6522,7 @@ paths: description: | Retrieves a single allowlist entry by its Fireblocks identifier for a specified connected account. - **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. + **Note:** Currently supports CoinbaseExchange/Binance accounts only. operationId: getConnectedAccountAllowlistEntry parameters: - description: The connected account identifier @@ -6343,33 +6564,33 @@ paths: $ref: "#/components/responses/Error" summary: Get a single allowlist entry for a connected account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: query x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountAllowlistEntry(connectedAccountsBetaApiGetConnectedAccountAllowlistEntryRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountAllowlistEntry(connectedAccountsApiGetConnectedAccountAllowlistEntryRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture> response =\ - \ fireblocks.connectedAccountsBeta().getConnectedAccountAllowlistEntry(accountId,\ + \ fireblocks.connectedAccounts().getConnectedAccountAllowlistEntry(accountId,\ \ allowlistId);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.get_connected_account_allowlist_entry(account_id,\ + code: "response = fireblocks.connected_accounts.get_connected_account_allowlist_entry(account_id,\ \ allowlist_id);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountAllowlistEntry(connectedAccountsBetaApiGetConnectedAccountAllowlistEntryRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountAllowlistEntry(connectedAccountsApiGetConnectedAccountAllowlistEntryRequest);" - lang: Java source: "CompletableFuture> response =\ - \ fireblocks.connectedAccountsBeta().getConnectedAccountAllowlistEntry(accountId,\ + \ fireblocks.connectedAccounts().getConnectedAccountAllowlistEntry(accountId,\ \ allowlistId);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.get_connected_account_allowlist_entry(account_id,\ + source: "response = fireblocks.connected_accounts.get_connected_account_allowlist_entry(account_id,\ \ allowlist_id);" x-accepts: - application/json @@ -6380,7 +6601,7 @@ paths: **Rate limit:** 1 request per minute per connected account. - **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. + **Note:** Currently supports CoinbaseExchange/Binance accounts only. operationId: syncConnectedAccountAllowlist parameters: - description: "A unique identifier for the request. If the request is sent\ @@ -6412,29 +6633,29 @@ paths: $ref: "#/components/responses/Error" summary: Sync allowlist for connected account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: async x-readme: code-samples: - language: typescript - code: "const response: Promise> = fireblocks.connectedAccountsBeta.syncConnectedAccountAllowlist(connectedAccountsBetaApiSyncConnectedAccountAllowlistRequest);" + code: "const response: Promise> = fireblocks.connectedAccounts.syncConnectedAccountAllowlist(connectedAccountsApiSyncConnectedAccountAllowlistRequest);" name: Fireblocks SDK TypeScript example - language: java - code: "CompletableFuture> response = fireblocks.connectedAccountsBeta().syncConnectedAccountAllowlist(accountId,\ + code: "CompletableFuture> response = fireblocks.connectedAccounts().syncConnectedAccountAllowlist(accountId,\ \ idempotencyKey);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.sync_connected_account_allowlist(account_id,\ + code: "response = fireblocks.connected_accounts.sync_connected_account_allowlist(account_id,\ \ idempotency_key);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript - source: "const response: Promise> = fireblocks.connectedAccountsBeta.syncConnectedAccountAllowlist(connectedAccountsBetaApiSyncConnectedAccountAllowlistRequest);" + source: "const response: Promise> = fireblocks.connectedAccounts.syncConnectedAccountAllowlist(connectedAccountsApiSyncConnectedAccountAllowlistRequest);" - lang: Java - source: "CompletableFuture> response = fireblocks.connectedAccountsBeta().syncConnectedAccountAllowlist(accountId,\ + source: "CompletableFuture> response = fireblocks.connectedAccounts().syncConnectedAccountAllowlist(accountId,\ \ idempotencyKey);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.sync_connected_account_allowlist(account_id,\ + source: "response = fireblocks.connected_accounts.sync_connected_account_allowlist(account_id,\ \ idempotency_key);" x-accepts: - application/json @@ -6442,8 +6663,6 @@ paths: get: description: | Retrieve current asset balances for a specific connected account as a flat list (one row per `assetId`, `balanceType`). - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: getConnectedAccountBalances parameters: - description: The ID of the account to fetch balances for. @@ -6487,33 +6706,33 @@ paths: $ref: "#/components/responses/Error" summary: Get balances for an account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: query x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountBalances(connectedAccountsBetaApiGetConnectedAccountBalancesRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountBalances(connectedAccountsApiGetConnectedAccountBalancesRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture>\ - \ response = fireblocks.connectedAccountsBeta().getConnectedAccountBalances(accountId,\ + \ response = fireblocks.connectedAccounts().getConnectedAccountBalances(accountId,\ \ pageSize, pageCursor);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.get_connected_account_balances(account_id,\ + code: "response = fireblocks.connected_accounts.get_connected_account_balances(account_id,\ \ page_size, page_cursor);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountBalances(connectedAccountsBetaApiGetConnectedAccountBalancesRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountBalances(connectedAccountsApiGetConnectedAccountBalancesRequest);" - lang: Java source: "CompletableFuture>\ - \ response = fireblocks.connectedAccountsBeta().getConnectedAccountBalances(accountId,\ + \ response = fireblocks.connectedAccounts().getConnectedAccountBalances(accountId,\ \ pageSize, pageCursor);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.get_connected_account_balances(account_id,\ + source: "response = fireblocks.connected_accounts.get_connected_account_balances(account_id,\ \ page_size, page_cursor);" x-accepts: - application/json @@ -6534,8 +6753,6 @@ paths: affected accounts are disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: updateConnectedAccountCredentials parameters: - description: The unique identifier of the connected account whose API key @@ -6613,33 +6830,33 @@ paths: $ref: "#/components/responses/Error" summary: Update connected account credentials tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: write x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.updateConnectedAccountCredentials(connectedAccountsBetaApiUpdateConnectedAccountCredentialsRequest);" + \ = fireblocks.connectedAccounts.updateConnectedAccountCredentials(connectedAccountsApiUpdateConnectedAccountCredentialsRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture>\ - \ response = fireblocks.connectedAccountsBeta().updateConnectedAccountCredentials(updateConnectedAccountCredentialsRequest,\ + \ response = fireblocks.connectedAccounts().updateConnectedAccountCredentials(updateConnectedAccountCredentialsRequest,\ \ accountId, idempotencyKey);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.update_connected_account_credentials(update_connected_account_credentials_request,\ + code: "response = fireblocks.connected_accounts.update_connected_account_credentials(update_connected_account_credentials_request,\ \ account_id, idempotency_key);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.updateConnectedAccountCredentials(connectedAccountsBetaApiUpdateConnectedAccountCredentialsRequest);" + \ = fireblocks.connectedAccounts.updateConnectedAccountCredentials(connectedAccountsApiUpdateConnectedAccountCredentialsRequest);" - lang: Java source: "CompletableFuture>\ - \ response = fireblocks.connectedAccountsBeta().updateConnectedAccountCredentials(updateConnectedAccountCredentialsRequest,\ + \ response = fireblocks.connectedAccounts().updateConnectedAccountCredentials(updateConnectedAccountCredentialsRequest,\ \ accountId, idempotencyKey);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.update_connected_account_credentials(update_connected_account_credentials_request,\ + source: "response = fireblocks.connected_accounts.update_connected_account_credentials(update_connected_account_credentials_request,\ \ account_id, idempotency_key);" x-content-type: application/json x-accepts: @@ -6648,8 +6865,6 @@ paths: get: description: | Retrieve all asset trading pairs supported by a specific connected account, including the pair type (`quote`, `market`, `onOffRamp`). - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: getConnectedAccountTradingPairs parameters: - description: The ID of the account to fetch supported pairs for. @@ -6694,33 +6909,33 @@ paths: $ref: "#/components/responses/Error" summary: Get supported trading pairs for an account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: query x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountTradingPairs(connectedAccountsBetaApiGetConnectedAccountTradingPairsRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountTradingPairs(connectedAccountsApiGetConnectedAccountTradingPairsRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture>\ - \ response = fireblocks.connectedAccountsBeta().getConnectedAccountTradingPairs(accountId,\ + \ response = fireblocks.connectedAccounts().getConnectedAccountTradingPairs(accountId,\ \ pageSize, pageCursor);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.get_connected_account_trading_pairs(account_id,\ + code: "response = fireblocks.connected_accounts.get_connected_account_trading_pairs(account_id,\ \ page_size, page_cursor);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountTradingPairs(connectedAccountsBetaApiGetConnectedAccountTradingPairsRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountTradingPairs(connectedAccountsApiGetConnectedAccountTradingPairsRequest);" - lang: Java source: "CompletableFuture>\ - \ response = fireblocks.connectedAccountsBeta().getConnectedAccountTradingPairs(accountId,\ + \ response = fireblocks.connectedAccounts().getConnectedAccountTradingPairs(accountId,\ \ pageSize, pageCursor);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.get_connected_account_trading_pairs(account_id,\ + source: "response = fireblocks.connected_accounts.get_connected_account_trading_pairs(account_id,\ \ page_size, page_cursor);" x-accepts: - application/json @@ -6728,8 +6943,6 @@ paths: get: description: | Retrieve current exchange rates for converting between specific assets in a connected account. - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: getConnectedAccountRates parameters: - description: The ID of the account to fetch rates for. @@ -6773,33 +6986,33 @@ paths: $ref: "#/components/responses/Error" summary: Get exchange rates for an account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: read x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountRates(connectedAccountsBetaApiGetConnectedAccountRatesRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountRates(connectedAccountsApiGetConnectedAccountRatesRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().getConnectedAccountRates(accountId,\ + \ = fireblocks.connectedAccounts().getConnectedAccountRates(accountId,\ \ baseAssetId, quoteAssetId);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.get_connected_account_rates(account_id,\ + code: "response = fireblocks.connected_accounts.get_connected_account_rates(account_id,\ \ base_asset_id, quote_asset_id);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountRates(connectedAccountsBetaApiGetConnectedAccountRatesRequest);" + \ = fireblocks.connectedAccounts.getConnectedAccountRates(connectedAccountsApiGetConnectedAccountRatesRequest);" - lang: Java source: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().getConnectedAccountRates(accountId,\ - \ baseAssetId, quoteAssetId);" + \ = fireblocks.connectedAccounts().getConnectedAccountRates(accountId, baseAssetId,\ + \ quoteAssetId);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.get_connected_account_rates(account_id,\ + source: "response = fireblocks.connected_accounts.get_connected_account_rates(account_id,\ \ base_asset_id, quote_asset_id);" x-accepts: - application/json @@ -6807,8 +7020,6 @@ paths: post: description: | Rename a connected account by account ID. - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: renameConnectedAccount parameters: - description: The unique identifier of the connected account @@ -6882,33 +7093,33 @@ paths: $ref: "#/components/responses/Error" summary: Rename Connected Account tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: write x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.renameConnectedAccount(connectedAccountsBetaApiRenameConnectedAccountRequest);" + \ = fireblocks.connectedAccounts.renameConnectedAccount(connectedAccountsApiRenameConnectedAccountRequest);" name: Fireblocks SDK TypeScript example - language: java code: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().renameConnectedAccount(renameConnectedAccountRequest,\ + \ = fireblocks.connectedAccounts().renameConnectedAccount(renameConnectedAccountRequest,\ \ accountId, idempotencyKey);" name: Fireblocks SDK Java example - language: python - code: "response = fireblocks.connected_accounts_beta.rename_connected_account(rename_connected_account_request,\ + code: "response = fireblocks.connected_accounts.rename_connected_account(rename_connected_account_request,\ \ account_id, idempotency_key);" name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.renameConnectedAccount(connectedAccountsBetaApiRenameConnectedAccountRequest);" + \ = fireblocks.connectedAccounts.renameConnectedAccount(connectedAccountsApiRenameConnectedAccountRequest);" - lang: Java source: "CompletableFuture> response\ - \ = fireblocks.connectedAccountsBeta().renameConnectedAccount(renameConnectedAccountRequest,\ + \ = fireblocks.connectedAccounts().renameConnectedAccount(renameConnectedAccountRequest,\ \ accountId, idempotencyKey);" - lang: Python - source: "response = fireblocks.connected_accounts_beta.rename_connected_account(rename_connected_account_request,\ + source: "response = fireblocks.connected_accounts.rename_connected_account(rename_connected_account_request,\ \ account_id, idempotency_key);" x-content-type: application/json x-accepts: @@ -6919,8 +7130,6 @@ paths: Returns the RSA public key used to encrypt the `creds` field before calling `POST /connected_accounts`. The key is a singleton resource scoped to the connected-accounts credentials domain — there is one per tenant context. - - **Note:** This endpoint is currently in beta and might be subject to changes. operationId: getConnectedAccountsCredentialsPublicKey responses: "200": @@ -6936,30 +7145,30 @@ paths: $ref: "#/components/responses/Error" summary: Get public key to encrypt connected account credentials tags: - - Connected Accounts (Beta) + - Connected Accounts x-rate-limit-category: read x-readme: code-samples: - language: typescript code: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountsCredentialsPublicKey();" + \ = fireblocks.connectedAccounts.getConnectedAccountsCredentialsPublicKey();" name: Fireblocks SDK TypeScript example - language: java code: CompletableFuture> - response = fireblocks.connectedAccountsBeta().getConnectedAccountsCredentialsPublicKey(); + response = fireblocks.connectedAccounts().getConnectedAccountsCredentialsPublicKey(); name: Fireblocks SDK Java example - language: python - code: response = fireblocks.connected_accounts_beta.get_connected_accounts_credentials_public_key(); + code: response = fireblocks.connected_accounts.get_connected_accounts_credentials_public_key(); name: Fireblocks SDK Python example x-codeSamples: - lang: TypeScript source: "const response: Promise>\ - \ = fireblocks.connectedAccountsBeta.getConnectedAccountsCredentialsPublicKey();" + \ = fireblocks.connectedAccounts.getConnectedAccountsCredentialsPublicKey();" - lang: Java source: CompletableFuture> - response = fireblocks.connectedAccountsBeta().getConnectedAccountsCredentialsPublicKey(); + response = fireblocks.connectedAccounts().getConnectedAccountsCredentialsPublicKey(); - lang: Python - source: response = fireblocks.connected_accounts_beta.get_connected_accounts_credentials_public_key(); + source: response = fireblocks.connected_accounts.get_connected_accounts_credentials_public_key(); x-accepts: - application/json /management/users: @@ -7145,6 +7354,144 @@ paths: x-content-type: application/json x-accepts: - application/json + /management/users/{id}: + delete: + description: |- + Requests deletion of a console user. The request is asynchronous: it goes through the workspace's configured "Delete users" approval policy (Settings > Quorums), exactly as deleting a user from the console does, and the user is removed only once that approval completes. + - Track progress by polling GET /management/users; deletion is complete when the user is disabled. + - Please note that this endpoint is available only for API keys with Admin/Non Signing Admin permissions. + Endpoint Permission: Admin, Non-Signing Admin. + **Note:** This endpoint is currently in beta and might be subject to changes. + operationId: deleteConsoleUser + parameters: + - description: The ID of the console user to delete + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + - description: "Acknowledges the impact of removing this user and proceeds anyway.\ + \ Overrides both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way\ + \ the acknowledgement checkbox does in the console." + explode: true + in: query + name: force + required: false + schema: + default: false + type: boolean + style: form + responses: + "202": + content: + application/json: + schema: + $ref: "#/components/schemas/ConsoleUser" + description: Deletion request accepted. Returns the console user that will + be removed once the workspace's configured approval completes. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "401": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: Unauthorized. Missing / invalid JWT token in Authorization + header. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "Lacking permissions, or the target cannot be deleted: the\ + \ user is the workspace Owner, or the caller is the target." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "Console user not found. Also returned for users in other workspaces\ + \ and for API users, so the endpoint does not reveal whether an ID exists." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "409": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "PENDING_REQUEST_EXISTS - a deletion request for this user\ + \ is already awaiting approval; USER_REFERENCED_IN_TAP - the user is referenced\ + \ by the workspace transaction authorization policy (can be overridden\ + \ with force=true); or USER_PENDING_ONBOARDING - the user has not completed\ + \ onboarding, so there is nothing to delete yet. Revoke the invitation\ + \ from the console instead." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "422": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "QUORUM_INTEGRITY - the user is required to complete the workspace's\ + \ admin approval quorum. Can be overridden with force=true, matching the\ + \ console's acknowledgement checkbox." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "5XX": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: Internal error. + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Request deletion of a console user + tags: + - Console User + x-rate-limit-category: write + x-lifecycle: + state: private_beta + feature_flag: management.ff.delete-console-user + x-readme: + code-samples: + - language: javascript + code: const res = await fireblocks.deleteConsoleUser(consoleUserId); + name: Fireblocks SDK Javascript example + - language: typescript + code: "const response: Promise> = fireblocks.consoleUser.deleteConsoleUser(consoleUserApiDeleteConsoleUserRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture> response = fireblocks.consoleUser().deleteConsoleUser(id,\ + \ force);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.console_user.delete_console_user(id, force);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise> = fireblocks.consoleUser.deleteConsoleUser(consoleUserApiDeleteConsoleUserRequest);" + - lang: Java + source: "CompletableFuture> response = fireblocks.consoleUser().deleteConsoleUser(id,\ + \ force);" + - lang: Python + source: "response = fireblocks.console_user.delete_console_user(id, force);" + x-accepts: + - application/json /contacts: get: description: | @@ -33311,10 +33658,30 @@ paths: /utxo_management/{vaultAccountId}/{assetId}/labels: patch: description: |- - Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. - Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. - **Note:** These endpoints are currently in beta and might be subject to changes. - Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. + Attach or detach labels to/from UTXOs in a vault account. Labels can be + used for organizing and filtering UTXOs. + + Labels are applied additively — `labelsToAttach` adds to the existing + label set and `labelsToDetach` removes from it. Neither operation + replaces the full set. + + The request is all-or-nothing: if any identifier cannot be labelled, no + UTXO is labelled and the request fails with `400`. The response lists + every failed identifier in `failures`, each with its own `reason` — use + it, not the status, to decide what to do: + - `NOT_FOUND` — not found in this vault and asset. + - `NOT_LABELLABLE` — spent, or removed, and can no longer be labelled. + + A UTXO removed within the last hour is reported as `NOT_FOUND` with + `utxoStatus: REMOVED`; if it does not reappear, it becomes + `NOT_LABELLABLE` after about an hour. A `400` without `failures` means + the request itself is malformed. + + **Note:** These endpoints are currently in beta and might be subject to + changes. + + Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, + Editor. operationId: updateUtxoLabels parameters: - description: The ID of the vault account @@ -33363,6 +33730,16 @@ paths: headers: X-Request-ID: $ref: "#/components/headers/X-Request-ID" + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/UtxoLabelsErrorResponse" + description: "Some identifiers could not be labelled (listed in `failures`),\ + \ or the request is malformed. No UTXO was labelled." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" default: $ref: "#/components/responses/Error" summary: Attach or detach labels to/from UTXOs @@ -33398,6 +33775,161 @@ paths: x-content-type: application/json x-accepts: - application/json + /utxo_management/{vaultAccountId}/{assetId}/selection_config: + get: + description: |- + Returns the config stored at this vault-and-asset scope, if any, and the effective strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and none is inherited from the workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this scope, otherwise `ASC`. + **Note:** These endpoints are currently in beta and might be subject to changes. + Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + operationId: getVaultAssetUtxoSelectionConfig + parameters: + - description: The ID of the vault account. + explode: false + in: path + name: vaultAccountId + required: true + schema: + format: numeric + type: string + x-fb-entity: vault_account + style: simple + - description: The ID of the asset + explode: false + in: path + name: assetId + required: true + schema: + type: string + x-fb-entity: asset + style: simple + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/UtxoSelectionConfigResponse" + description: Current UTXO selection config + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Get vault and asset UTXO selection config + tags: + - UTXO Management (Beta) + x-rate-limit-category: read + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.getVaultAssetUtxoSelectionConfig();" + name: Fireblocks SDK TypeScript example + - language: java + code: CompletableFuture> response + = fireblocks.uTXOManagementBeta().getVaultAssetUtxoSelectionConfig(); + name: Fireblocks SDK Java example + - language: python + code: response = fireblocks.u_t_x_o_management_beta.get_vault_asset_utxo_selection_config(); + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.getVaultAssetUtxoSelectionConfig();" + - lang: Java + source: CompletableFuture> response + = fireblocks.uTXOManagementBeta().getVaultAssetUtxoSelectionConfig(); + - lang: Python + source: response = fireblocks.u_t_x_o_management_beta.get_vault_asset_utxo_selection_config(); + x-accepts: + - application/json + put: + description: |- + Creates or updates the UTXO selection strategy for this vault account and asset. `ADAPTIVE` is recommended. + **Note:** These endpoints are currently in beta and might be subject to changes. + Endpoint Permission: Admin, Non-Signing Admin. + operationId: upsertVaultAssetUtxoSelectionConfig + parameters: + - description: The ID of the vault account. + explode: false + in: path + name: vaultAccountId + required: true + schema: + format: numeric + type: string + x-fb-entity: vault_account + style: simple + - description: The ID of the asset + explode: false + in: path + name: assetId + required: true + schema: + type: string + x-fb-entity: asset + style: simple + - description: "A unique identifier for the request. If the request is sent\ + \ multiple times with the same idempotency key, the server will return the\ + \ same response as the first request. The idempotency key is valid for 24\ + \ hours." + explode: false + in: header + name: Idempotency-Key + required: false + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/UpsertUtxoSelectionConfigRequest" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/UtxoSelectionConfigResponse" + description: Updated UTXO selection config + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Upsert vault and asset UTXO selection config + tags: + - UTXO Management (Beta) + x-rate-limit-category: write + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.upsertVaultAssetUtxoSelectionConfig(uTXOManagementBetaApiUpsertVaultAssetUtxoSelectionConfigRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture> response\ + \ = fireblocks.uTXOManagementBeta().upsertVaultAssetUtxoSelectionConfig(upsertUtxoSelectionConfigRequest,\ + \ idempotencyKey);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.u_t_x_o_management_beta.upsert_vault_asset_utxo_selection_config(upsert_utxo_selection_config_request,\ + \ idempotency_key);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.upsertVaultAssetUtxoSelectionConfig(uTXOManagementBetaApiUpsertVaultAssetUtxoSelectionConfigRequest);" + - lang: Java + source: "CompletableFuture> response\ + \ = fireblocks.uTXOManagementBeta().upsertVaultAssetUtxoSelectionConfig(upsertUtxoSelectionConfigRequest,\ + \ idempotencyKey);" + - lang: Python + source: "response = fireblocks.u_t_x_o_management_beta.upsert_vault_asset_utxo_selection_config(upsert_utxo_selection_config_request,\ + \ idempotency_key);" + x-content-type: application/json + x-accepts: + - application/json /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs: get: description: |- @@ -33616,6 +34148,122 @@ paths: \ max_amount);" x-accepts: - application/json + /utxo_management/selection_config: + get: + description: |- + Returns the workspace-level configured selection strategy and the effective strategy after runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise `ASC`. + **Note:** These endpoints are currently in beta and might be subject to changes. + Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + operationId: getUtxoSelectionConfig + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/UtxoSelectionConfigResponse" + description: Current UTXO selection config + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Get UTXO selection config + tags: + - UTXO Management (Beta) + x-rate-limit-category: read + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.getUtxoSelectionConfig();" + name: Fireblocks SDK TypeScript example + - language: java + code: CompletableFuture> response + = fireblocks.uTXOManagementBeta().getUtxoSelectionConfig(); + name: Fireblocks SDK Java example + - language: python + code: response = fireblocks.u_t_x_o_management_beta.get_utxo_selection_config(); + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.getUtxoSelectionConfig();" + - lang: Java + source: CompletableFuture> response + = fireblocks.uTXOManagementBeta().getUtxoSelectionConfig(); + - lang: Python + source: response = fireblocks.u_t_x_o_management_beta.get_utxo_selection_config(); + x-accepts: + - application/json + put: + description: |- + Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is recommended. + **Note:** These endpoints are currently in beta and might be subject to changes. + Endpoint Permission: Admin, Non-Signing Admin. + operationId: upsertUtxoSelectionConfig + parameters: + - description: "A unique identifier for the request. If the request is sent\ + \ multiple times with the same idempotency key, the server will return the\ + \ same response as the first request. The idempotency key is valid for 24\ + \ hours." + explode: false + in: header + name: Idempotency-Key + required: false + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/UpsertUtxoSelectionConfigRequest" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/UtxoSelectionConfigResponse" + description: Updated UTXO selection config + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Upsert UTXO selection config + tags: + - UTXO Management (Beta) + x-rate-limit-category: write + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.upsertUtxoSelectionConfig(uTXOManagementBetaApiUpsertUtxoSelectionConfigRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture> response\ + \ = fireblocks.uTXOManagementBeta().upsertUtxoSelectionConfig(upsertUtxoSelectionConfigRequest,\ + \ idempotencyKey);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.u_t_x_o_management_beta.upsert_utxo_selection_config(upsert_utxo_selection_config_request,\ + \ idempotency_key);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.uTXOManagementBeta.upsertUtxoSelectionConfig(uTXOManagementBetaApiUpsertUtxoSelectionConfigRequest);" + - lang: Java + source: "CompletableFuture> response\ + \ = fireblocks.uTXOManagementBeta().upsertUtxoSelectionConfig(upsertUtxoSelectionConfigRequest,\ + \ idempotencyKey);" + - lang: Python + source: "response = fireblocks.u_t_x_o_management_beta.upsert_utxo_selection_config(upsert_utxo_selection_config_request,\ + \ idempotency_key);" + x-content-type: application/json + x-accepts: + - application/json /vault/accounts: get: deprecated: true @@ -37613,6 +38261,142 @@ paths: x-content-type: application/json x-accepts: - application/json + /webhooks_settings/mtls: + get: + description: | + Lists the workspace's mTLS configurations, newest first. Pass `ids` to ask about + particular ones instead — useful for resolving the `webhookMtlsId` values on a set of + webhooks in one call. + operationId: getWebhookMtlsConfigs + parameters: + - description: "Return only the configurations with these ids, instead of all\ + \ of them. Repeat the parameter for each id. An id belonging to another\ + \ workspace, or to nothing, is left out of the response rather than failing\ + \ the request." + example: + - 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f + explode: true + in: query + name: ids + required: false + schema: + items: + format: uuid + type: string + maxItems: 100 + type: array + style: form + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookMtlsConfigsList" + description: The workspace's mTLS configurations + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: List the uploaded mTLS configurations + tags: + - Webhooks V2 + x-rate-limit-category: read + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.webhooksV2.getWebhookMtlsConfigs(webhooksV2ApiGetWebhookMtlsConfigsRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: CompletableFuture>> response = + fireblocks.webhooksV2().getWebhookMtlsConfigs(ids); + name: Fireblocks SDK Java example + - language: python + code: response = fireblocks.webhooks_v2.get_webhook_mtls_configs(ids); + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.webhooksV2.getWebhookMtlsConfigs(webhooksV2ApiGetWebhookMtlsConfigsRequest);" + - lang: Java + source: CompletableFuture>> response = + fireblocks.webhooksV2().getWebhookMtlsConfigs(ids); + - lang: Python + source: response = fireblocks.webhooks_v2.get_webhook_mtls_configs(ids); + x-accepts: + - application/json + post: + description: | + Stores a certificate signed against the CSR from `GET /v1/webhooks_settings/mtls_csr` and returns its id, which is then set as `webhookMtlsId` on a webhook or on OAuth credentials. The private key the certificate was issued for is derived from the certificate, so it is never named by the caller. + + Re-uploading a certificate already stored returns the existing id rather than creating a second configuration, so several webhooks and OAuth credentials can share one certificate. + + A certificate that was not issued for a private key this workspace holds is rejected with a `400`. + + **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + operationId: createWebhookMtlsConfig + parameters: + - description: "A unique identifier for the request. If the request is sent\ + \ multiple times with the same idempotency key, the server will return the\ + \ same response as the first request. The idempotency key is valid for 24\ + \ hours." + explode: false + in: header + name: Idempotency-Key + required: false + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/CreateWebhookMtlsConfigRequest" + required: true + responses: + "201": + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookMtlsConfig" + description: The stored mTLS configuration + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Create an mTLS configuration + tags: + - Webhooks V2 + x-rate-limit-category: write + x-readme: + code-samples: + - language: typescript + code: "const response: Promise> =\ + \ fireblocks.webhooksV2.createWebhookMtlsConfig(webhooksV2ApiCreateWebhookMtlsConfigRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture> response = fireblocks.webhooksV2().createWebhookMtlsConfig(createWebhookMtlsConfigRequest,\ + \ idempotencyKey);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.webhooks_v2.create_webhook_mtls_config(create_webhook_mtls_config_request,\ + \ idempotency_key);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise> =\ + \ fireblocks.webhooksV2.createWebhookMtlsConfig(webhooksV2ApiCreateWebhookMtlsConfigRequest);" + - lang: Java + source: "CompletableFuture> response = fireblocks.webhooksV2().createWebhookMtlsConfig(createWebhookMtlsConfigRequest,\ + \ idempotencyKey);" + - lang: Python + source: "response = fireblocks.webhooks_v2.create_webhook_mtls_config(create_webhook_mtls_config_request,\ + \ idempotency_key);" + x-content-type: application/json + x-accepts: + - application/json /webhooks_settings/mtls_csr: get: description: | @@ -37678,6 +38462,232 @@ paths: source: response = fireblocks.webhooks_v2.get_mtls_csr(key_algorithm); x-accepts: - application/json + /webhooks_settings/mtls/{webhookMtlsId}: + delete: + description: | + Deletes an mTLS configuration. By default the delete is refused while the configuration is still in use: if any webhook or OAuth credentials reference it, nothing is deleted and the request fails with `409 Conflict`, naming the reason and listing the ids of what references it. This protects a shared configuration from being removed out from under the webhooks and token requests that depend on it. + + Pass `forceDelete=true` to delete anyway. That detaches everything referencing it — it clears `webhookMtlsId` on each webhook and OAuth credentials, it does **not** delete them — then deletes the configuration and returns the deleted resource together with `detachedWebhookIds` and `detachedWebhookOauthIds`. Detached webhooks keep delivering notifications, and detached OAuth credentials keep requesting tokens, but without a client certificate, so an endpoint that requires mTLS will reject them from that point on. + + When nothing references the configuration the delete succeeds either way, and both lists come back empty. + + **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + operationId: deleteWebhookMtlsConfig + parameters: + - description: The unique identifier of the mTLS configuration + explode: false + in: path + name: webhookMtlsId + required: true + schema: + example: 44fcead0-7053-4831-a53a-df7fb90d440f + format: uuid + type: string + style: simple + - description: "Delete the configuration even while webhooks or OAuth credentials\ + \ still reference it, detaching them instead of refusing; their ids are\ + \ returned in `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave\ + \ it unset, or `false`, to get a `409 Conflict` whenever anything still\ + \ references the configuration." + example: true + explode: true + in: query + name: forceDelete + required: false + schema: + default: false + type: boolean + style: form + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/DeleteWebhookMtlsConfigResponse" + description: "The deleted mTLS configuration, plus the ids of any webhooks\ + \ and OAuth credentials that were detached from it" + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "409": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "Webhooks or OAuth credentials still reference this configuration\ + \ and `forceDelete` was not set. Nothing was deleted. The error message\ + \ names the reason and the ids of what references it — detach those webhooks\ + \ and OAuth credentials, or retry with `forceDelete=true`." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Delete an mTLS configuration + tags: + - Webhooks V2 + x-rate-limit-category: write + x-readme: + code-samples: + - language: typescript + code: "const response: Promise>\ + \ = fireblocks.webhooksV2.deleteWebhookMtlsConfig(webhooksV2ApiDeleteWebhookMtlsConfigRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture> response\ + \ = fireblocks.webhooksV2().deleteWebhookMtlsConfig(webhookMtlsId, forceDelete);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.webhooks_v2.delete_webhook_mtls_config(webhook_mtls_id,\ + \ force_delete);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise>\ + \ = fireblocks.webhooksV2.deleteWebhookMtlsConfig(webhooksV2ApiDeleteWebhookMtlsConfigRequest);" + - lang: Java + source: "CompletableFuture> response\ + \ = fireblocks.webhooksV2().deleteWebhookMtlsConfig(webhookMtlsId, forceDelete);" + - lang: Python + source: "response = fireblocks.webhooks_v2.delete_webhook_mtls_config(webhook_mtls_id,\ + \ force_delete);" + x-accepts: + - application/json + get: + description: | + Retrieve one stored mTLS configuration by its id. + operationId: getWebhookMtlsConfig + parameters: + - description: The unique identifier of the mTLS configuration + explode: false + in: path + name: webhookMtlsId + required: true + schema: + example: 44fcead0-7053-4831-a53a-df7fb90d440f + format: uuid + type: string + style: simple + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookMtlsConfig" + description: An mTLS configuration + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Get an mTLS configuration by id + tags: + - Webhooks V2 + x-rate-limit-category: read + x-readme: + code-samples: + - language: typescript + code: "const response: Promise> =\ + \ fireblocks.webhooksV2.getWebhookMtlsConfig(webhooksV2ApiGetWebhookMtlsConfigRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: CompletableFuture> response = fireblocks.webhooksV2().getWebhookMtlsConfig(webhookMtlsId); + name: Fireblocks SDK Java example + - language: python + code: response = fireblocks.webhooks_v2.get_webhook_mtls_config(webhook_mtls_id); + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise> =\ + \ fireblocks.webhooksV2.getWebhookMtlsConfig(webhooksV2ApiGetWebhookMtlsConfigRequest);" + - lang: Java + source: CompletableFuture> response = fireblocks.webhooksV2().getWebhookMtlsConfig(webhookMtlsId); + - lang: Python + source: response = fireblocks.webhooks_v2.get_webhook_mtls_config(webhook_mtls_id); + x-accepts: + - application/json + patch: + description: | + Renames a configuration, replaces its certificate, or both. Only the fields present in the request are changed; anything omitted is left as it is, and a request with neither field is rejected with a `400`. + + Replacing `signedCert` switches every webhook and OAuth credentials set using this configuration over to the new certificate in one write, and the private key it was issued for is re-derived from the certificate. A replacement that was not issued for a private key this workspace holds is rejected with a `400`. + + Sending `name: null` removes the label. + + **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + operationId: updateWebhookMtlsConfig + parameters: + - description: The unique identifier of the mTLS configuration + explode: false + in: path + name: webhookMtlsId + required: true + schema: + example: 44fcead0-7053-4831-a53a-df7fb90d440f + format: uuid + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateWebhookMtlsConfigRequest" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookMtlsConfig" + description: The updated mTLS configuration + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorSchema" + description: "Neither `name` nor `signedCert` was provided, so there is\ + \ nothing to change, or the replacement certificate was rejected — it\ + \ is not valid X.509, or it was not issued for a private key this workspace\ + \ holds." + headers: + X-Request-ID: + $ref: "#/components/headers/X-Request-ID" + default: + $ref: "#/components/responses/Error" + summary: Update an mTLS configuration + tags: + - Webhooks V2 + x-rate-limit-category: write + x-readme: + code-samples: + - language: typescript + code: "const response: Promise> =\ + \ fireblocks.webhooksV2.updateWebhookMtlsConfig(webhooksV2ApiUpdateWebhookMtlsConfigRequest);" + name: Fireblocks SDK TypeScript example + - language: java + code: "CompletableFuture> response = fireblocks.webhooksV2().updateWebhookMtlsConfig(updateWebhookMtlsConfigRequest,\ + \ webhookMtlsId);" + name: Fireblocks SDK Java example + - language: python + code: "response = fireblocks.webhooks_v2.update_webhook_mtls_config(update_webhook_mtls_config_request,\ + \ webhook_mtls_id);" + name: Fireblocks SDK Python example + x-codeSamples: + - lang: TypeScript + source: "const response: Promise> =\ + \ fireblocks.webhooksV2.updateWebhookMtlsConfig(webhooksV2ApiUpdateWebhookMtlsConfigRequest);" + - lang: Java + source: "CompletableFuture> response = fireblocks.webhooksV2().updateWebhookMtlsConfig(updateWebhookMtlsConfigRequest,\ + \ webhookMtlsId);" + - lang: Python + source: "response = fireblocks.webhooks_v2.update_webhook_mtls_config(update_webhook_mtls_config_request,\ + \ webhook_mtls_id);" + x-content-type: application/json + x-accepts: + - application/json /webhooks_settings/oauth: get: description: | @@ -37938,7 +38948,7 @@ paths: description: | Updates only the fields present in the request; anything omitted is left as it is. Sending `clientSecret` on its own rotates the secret for every webhook using these credentials. - `customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `mtlsClientSignedCert` is a scalar rather than a map, so `null` there does remove it. + `customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `webhookMtlsId` is a scalar rather than a map, so `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. operationId: updateWebhookOauth @@ -47336,6 +48346,159 @@ components: example: "0.0013" type: string type: object + CantonDomainEnum: + description: "The Canton domain a transaction belongs to. Singular, and it matches\ + \ the prefix of the `type` / `responseType` values in the same domain character\ + \ for character." + enum: + - ONBOARDING + - ALLOCATION + - TRANSFER + example: ALLOCATION + type: string + CantonVendorEnum: + description: The vendor whose flow this is. Present only where the flow is vendor-specific + — absent on vendor-neutral Splice operations such as allocation withdraw. + enum: + - DTCC + - TRADEWEB + example: DTCC + type: string + CantonOfferResponseDetails: + description: "The transaction belongs to an offer conversation: the offer itself,\ + \ the response to it, or a leg that carries no answer of its own. The only\ + \ block that changes over a transaction's lifetime." + example: + version: 1 + domain: ONBOARDING + vendor: DTCC + availableResponses: + - DTCC_END_INVESTOR_ONBOARDING_ACCEPT + - DTCC_END_INVESTOR_ONBOARDING_REJECT + expiresAt: 2026-12-31T23:59:59Z + properties: + version: + description: "The shape of this block. Stamped at creation and never changed,\ + \ so a reader always knows which version it is holding." + example: 1 + type: integer + domain: + $ref: "#/components/schemas/CantonDomainEnum" + vendor: + $ref: "#/components/schemas/CantonVendorEnum" + availableResponses: + description: The responses that can be sent for this offer right now. An + empty array means nothing is answerable on this transaction — which is + the difference between an actionable offer and a linked leg that shares + its sub-status. + example: + - DTCC_END_INVESTOR_ONBOARDING_ACCEPT + - DTCC_END_INVESTOR_ONBOARDING_REJECT + items: + description: A response type that may be sent for this offer. + example: DTCC_END_INVESTOR_ONBOARDING_ACCEPT + type: string + type: array + expiresAt: + description: "When the offer expires, where it has a deadline." + example: 2026-12-31T23:59:59Z + format: date-time + type: string + approvalTransactionId: + description: "The response transaction, once one has been dispatched for\ + \ this offer." + example: 2a7f4c31-9d08-4b52-8e6a-1f3c70b9d485 + type: string + originalTransactionId: + description: The transaction this one relates to — the offer a response + answered. + example: 9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488 + type: string + verdict: + description: "The outcome, set once the transaction reaches a terminal status." + enum: + - ACCEPTED + - REJECTED + example: ACCEPTED + type: string + type: object + CantonCallDetails: + description: A call made through the Canton calls endpoint. Written once and + never changed. + example: + version: 1 + domain: ALLOCATION + type: ALLOCATION_WITHDRAW + originalTransactionId: 9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488 + properties: + version: + description: "The shape of this block. Stamped at creation and never changed,\ + \ so a reader always knows which version it is holding." + example: 1 + type: integer + domain: + $ref: "#/components/schemas/CantonDomainEnum" + type: + description: "The call type, matching the `type` sent when the call was\ + \ created." + example: ALLOCATION_WITHDRAW + type: string + vendor: + $ref: "#/components/schemas/CantonVendorEnum" + originalTransactionId: + description: "The transaction this call acts on. On a withdraw it is the\ + \ allocation that was withdrawn, so the withdraw transaction read on its\ + \ own still says what it withdrew." + example: 9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488 + type: string + type: object + CantonSettlementDetails: + description: "The credit side of a delivery-versus-payment: a venue settled\ + \ an allocation. Written once, at creation — the transaction is already complete\ + \ when it appears." + example: + version: 1 + domain: ALLOCATION + type: ALLOCATION_SETTLEMENT + originalTransactionId: 9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488 + properties: + version: + description: "The shape of this block. Stamped at creation and never changed,\ + \ so a reader always knows which version it is holding." + example: 1 + type: integer + domain: + $ref: "#/components/schemas/CantonDomainEnum" + type: + description: The settlement type. + example: ALLOCATION_SETTLEMENT + type: string + originalTransactionId: + description: The allocation this receipt settles. + example: 9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488 + type: string + type: object + CantonDetails: + description: |- + Canton transaction context. Present on transactions that belong to a Canton flow, and the authoritative signal that a transaction IS one — do not branch on `operation`, which is `CANTON_CALL` for customer-initiated calls but `TRANSFER` for an incoming Canton transfer offer. **No `cantonDetails` at all means the transaction is not a Canton item.** + + The service sets exactly one of `offerResponse`, `call` or `settlement`. That is a guarantee about what is sent, NOT a constraint this schema enforces: the three are declared as independent optional properties on purpose, so that a response carrying a block a client does not yet know about — or a row written before a block type existed — still validates. Response schemas here stay additive. Read the block you recognise; do not reject a payload for the shape of the others. + + Every block carries `version`, stamped when the transaction is created and never changed — a transaction written today keeps its shape, so `version` is how you know which shape you are reading. + example: + call: + version: 1 + domain: ALLOCATION + type: ALLOCATION_WITHDRAW + originalTransactionId: 9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488 + properties: + offerResponse: + $ref: "#/components/schemas/CantonOfferResponseDetails" + call: + $ref: "#/components/schemas/CantonCallDetails" + settlement: + $ref: "#/components/schemas/CantonSettlementDetails" + type: object RewardInfo: description: "This field is relevant only for Algorand transactions. Both `srcRewards`\ \ and `destRewards` will appear only for Vault to Vault transactions, otherwise\ @@ -49676,6 +50839,12 @@ components: screeningStatus: COMPLETED categoryId: 5 timestamp: 1774363599908 + cantonDetails: + call: + version: 1 + domain: ALLOCATION + type: ALLOCATION_WITHDRAW + originalTransactionId: 9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488 requestedAmount: 3.616076749251911 status: status note: note @@ -50529,6 +51698,8 @@ components: \ the `feeCurrency` field, if any." example: PATH_USD type: string + cantonDetails: + $ref: "#/components/schemas/CantonDetails" networkRecords: description: "In case a single transaction resulted with multiple transfers,\ \ for example a result of a contract call, then this parameter specifies\ @@ -50706,6 +51877,7 @@ components: * `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing) * `APPROVE` - Enables the approve function for a smart contract or wallet to withdraw from a designated wallet. [Learn more](https://support.fireblocks.io/hc/en-us/articles/4404616097426-Amount-Cap-for-Approve-transactions). * `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account. + * `CANTON_CALL` - A customer-initiated Canton operation, such as withdrawing an allocation or responding to an onboarding offer. Note that not every Canton transaction carries this operation — an incoming Canton transfer offer is a `TRANSFER` — so use the top-level `cantonDetails` rather than `operation` to identify a Canton transaction. enum: - TRANSFER - BURN @@ -50716,6 +51888,7 @@ components: - TYPED_MESSAGE - APPROVE - ENABLE_ASSET + - CANTON_CALL type: string TransferPeerPathSubType: enum: @@ -60134,28 +61307,6 @@ components: - order.updated - automation_execution.update type: string - WebhookMtls: - description: "mTLS configuration for the webhook. On responses, present only\ - \ when a signed client certificate is set. On requests, provide a signed client\ - \ certificate to enable mTLS, or null to remove it." - example: - clientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- - nullable: true - properties: - clientSignedCert: - description: Signed client certificate PEM used for mTLS when delivering - notifications. - example: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- - type: string - required: - - clientSignedCert - type: object WebhookCustomHeadersResponse: description: Names of the custom headers configured for this webhook. Header values are never returned. @@ -60168,14 +61319,10 @@ components: Webhook: example: createdAt: 1625126400000 + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f webhookOauthId: 123e4567-e89b-12d3-a456-426614174000 description: This webhook is used for transactions notifications id: 123e4567-e89b-12d3-a456-426614174000 - mtls: - clientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- url: https://example.com/webhook events: - transaction.created @@ -60228,8 +61375,13 @@ components: example: 1625126400000 format: int64 type: integer - mtls: - $ref: "#/components/schemas/WebhookMtls" + webhookMtlsId: + description: "The id of the mTLS configuration this webhook presents when\ + \ delivering, from `/v1/webhooks_settings/mtls`. Absent when the webhook\ + \ does not use mTLS." + example: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f + format: uuid + type: string webhookOauthId: description: "The id of the OAuth credentials this webhook authenticates\ \ with. Absent when the webhook does not use OAuth. Read the credentials\ @@ -60259,14 +61411,10 @@ components: next: eJ0eXAiOiJKV1QiLCJhbGcOiJIUzI1NiJ9 data: - createdAt: 1625126400000 + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f webhookOauthId: 123e4567-e89b-12d3-a456-426614174000 description: This webhook is used for transactions notifications id: 123e4567-e89b-12d3-a456-426614174000 - mtls: - clientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- url: https://example.com/webhook events: - transaction.created @@ -60277,14 +61425,10 @@ components: status: ENABLED updatedAt: 1625126400000 - createdAt: 1625126400000 + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f webhookOauthId: 123e4567-e89b-12d3-a456-426614174000 description: This webhook is used for transactions notifications id: 123e4567-e89b-12d3-a456-426614174000 - mtls: - clientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- url: https://example.com/webhook events: - transaction.created @@ -60332,13 +61476,9 @@ components: type: object CreateWebhookRequest: example: + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f webhookOauthId: 123e4567-e89b-12d3-a456-426614174000 description: This webhook is used for transactions notifications - mtls: - clientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- url: https://example.com/webhook events: - transaction.created @@ -60376,8 +61516,15 @@ components: \ receive notifications." example: false type: boolean - mtls: - $ref: "#/components/schemas/WebhookMtls" + webhookMtlsId: + description: "The id of the mTLS configuration this webhook presents when\ + \ delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may\ + \ share one configuration, so replacing its certificate covers all of\ + \ them at once. Send `null` to stop using mTLS for this webhook." + example: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f + format: uuid + nullable: true + type: string webhookOauthId: description: "The id of the OAuth credentials this webhook authenticates\ \ with, from `/v1/webhooks_settings/oauth`. Several webhooks may share\ @@ -60448,6 +61595,171 @@ components: - csr - keyAlgorithm type: object + WebhookMtlsConfig: + description: "A signed client certificate stored for the workspace, and the\ + \ id a webhook or OAuth credentials set references to use it. Several of them\ + \ may share one configuration, so replacing the certificate here switches\ + \ all of them at once." + example: + signedCert: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + createdAt: 1694572200000 + name: Production gateway 2026 + id: 44fcead0-7053-4831-a53a-df7fb90d440f + expiresAt: 1726108200000 + updatedAt: 1726108200000 + properties: + id: + description: "The unique identifier of the mTLS configuration, to be set\ + \ as `webhookMtlsId` on a webhook or on OAuth credentials." + example: 44fcead0-7053-4831-a53a-df7fb90d440f + format: uuid + type: string + name: + description: The label given to this mTLS configuration. + example: Production gateway 2026 + type: string + signedCert: + description: The signed client certificate PEM. + example: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + type: string + expiresAt: + description: "When the certificate itself expires, in milliseconds since\ + \ the epoch." + example: 1726108200000 + format: int64 + type: integer + createdAt: + description: "When the certificate was uploaded, in milliseconds since the\ + \ epoch." + example: 1694572200000 + format: int64 + type: integer + updatedAt: + description: "When this configuration was last changed, in milliseconds\ + \ since the epoch. Differs from createdAt once the certificate has been\ + \ replaced or the configuration renamed." + example: 1726108200000 + format: int64 + type: integer + required: + - createdAt + - expiresAt + - id + - signedCert + - updatedAt + type: object + WebhookMtlsConfigsList: + description: "Every mTLS configuration belonging to the workspace, newest first." + items: + $ref: "#/components/schemas/WebhookMtlsConfig" + type: array + CreateWebhookMtlsConfigRequest: + example: + signedCert: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + name: Production gateway 2026 + properties: + name: + description: "A label for this mTLS configuration, to tell several certificates\ + \ apart. Letters, digits and spaces only." + example: Production gateway 2026 + maxLength: 255 + pattern: "^[a-zA-Z0-9 ]*$" + type: string + signedCert: + description: "Signed client certificate PEM, issued for the CSR from `GET\ + \ /v1/webhooks_settings/mtls_csr`. The private key it belongs to is derived\ + \ from the certificate itself." + example: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + type: string + required: + - signedCert + type: object + DeleteWebhookMtlsConfigResponse: + allOf: + - $ref: "#/components/schemas/WebhookMtlsConfig" + - properties: + detachedWebhookIds: + description: "Webhooks whose `webhookMtlsId` was cleared. The webhooks\ + \ themselves are not deleted and keep delivering, just without a client\ + \ certificate. Empty unless `forceDelete=true` detached something." + example: + - 44fcead0-7053-4831-a53a-df7fb90d440f + items: + format: uuid + type: string + type: array + detachedWebhookOauthIds: + description: OAuth credentials whose `webhookMtlsId` was cleared. Their + token requests continue without a client certificate. Empty unless `forceDelete=true` + detached something. + example: + - 6e5daa9a-56cd-4975-ac16-bb9d1b48dff5 + items: + format: uuid + type: string + type: array + required: + - detachedWebhookIds + - detachedWebhookOauthIds + type: object + description: "The deleted mTLS configuration, plus the ids of any webhooks and\ + \ OAuth credentials the delete detached from it. They are only detached by\ + \ `forceDelete=true`; without it a delete is refused with `409` while anything\ + \ still references the configuration." + example: + signedCert: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + createdAt: 1694572200000 + detachedWebhookIds: + - 44fcead0-7053-4831-a53a-df7fb90d440f + name: Production gateway 2026 + detachedWebhookOauthIds: + - 6e5daa9a-56cd-4975-ac16-bb9d1b48dff5 + id: 44fcead0-7053-4831-a53a-df7fb90d440f + expiresAt: 1726108200000 + updatedAt: 1726108200000 + UpdateWebhookMtlsConfigRequest: + description: At least one property must be provided. + example: + signedCert: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + name: Production gateway 2027 + minProperties: 1 + properties: + name: + description: "A new label for this mTLS configuration, or `null` to remove\ + \ it. Letters, digits and spaces only." + example: Production gateway 2027 + maxLength: 255 + nullable: true + pattern: "^[a-zA-Z0-9 ]*$" + type: string + signedCert: + description: "A replacement signed certificate PEM. Every webhook and OAuth\ + \ credentials set using this configuration switches to it, and the private\ + \ key it was issued for is re-derived from the certificate." + example: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + type: string + type: object WebhookOauthCredentials: description: "A stored OAuth 2.0 client credential set, referenced by webhooks\ \ through their `webhookOauthId`. Deliveries for a webhook that references\ @@ -60462,6 +61774,7 @@ components: clientId: my-client-id customBodyParams: - scope + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f customJwtClaims: - aud - resource @@ -60471,10 +61784,6 @@ components: url: https://auth.example.com/oauth/token customHeaders: - X-Api-Key - mtlsClientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- updatedAt: 1625097600000 properties: id: @@ -60532,13 +61841,12 @@ components: items: type: string type: array - mtlsClientSignedCert: - description: PEM-encoded client certificate used for mTLS when fetching - OAuth tokens. - example: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- + webhookMtlsId: + description: "The id of the mTLS configuration presented to the token endpoint.\ + \ Absent when the token request does not use mTLS. Read the certificate\ + \ from `/v1/webhooks_settings/mtls/{id}`." + example: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f + format: uuid type: string createdAt: description: "The date and time the OAuth credentials were created, in milliseconds." @@ -60609,6 +61917,7 @@ components: clientId: my-client-id customBodyParams: scope: payments.read payments.write + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f customJwtClaims: aud: https://auth.example.com email_verified: true @@ -60618,10 +61927,6 @@ components: url: https://auth.example.com/oauth/token customHeaders: x-api-key: gateway-key - mtlsClientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- properties: name: description: "A label for this credential set, shown when listing them." @@ -60693,13 +61998,17 @@ components: x-api-key: gateway-key nullable: true type: object - mtlsClientSignedCert: - description: PEM-encoded client certificate for mTLS when fetching tokens. - Must be a valid X.509 certificate inside its validity window. - example: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- + webhookMtlsId: + description: "The id of the mTLS configuration presented to the token endpoint,\ + \ from `/v1/webhooks_settings/mtls`. It can be the same configuration\ + \ a webhook uses, so one certificate, signed from `GET /v1/webhooks_settings/mtls_csr`,\ + \ serves both the token endpoint and the receiver. Omit, or send `null`,\ + \ for a token request without mTLS. Requires the mTLS feature to be enabled\ + \ for the workspace (`403` otherwise), a configuration of this workspace\ + \ (`404` otherwise), and one linked to a private key (`400` otherwise)." + example: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f + format: uuid + nullable: true type: string required: - clientId @@ -60735,6 +62044,7 @@ components: - scope detachedWebhookIds: - 44fcead0-7053-4831-a53a-df7fb90d440f + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f customJwtClaims: - aud - resource @@ -60744,10 +62054,6 @@ components: url: https://auth.example.com/oauth/token customHeaders: - X-Api-Key - mtlsClientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- updatedAt: 1625097600000 WebhookOauthCustomJwtClaimsUpdate: additionalProperties: @@ -60791,12 +62097,13 @@ components: description: |- A partial update. Every field is optional and an omitted field is left as it is, so `{ "clientSecret": "new-secret" }` rotates the secret and changes nothing else. A rotation applies to every webhook referencing these credentials. - The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `mtlsClientSignedCert` is a scalar, so `null` there removes it. + The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `webhookMtlsId` is a scalar, so `null` there removes it. example: clientId: my-client-id customBodyParams: scope: payments.read payments.write audience: null + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f customJwtClaims: aud: https://auth.example.com resource: null @@ -60807,10 +62114,6 @@ components: customHeaders: x-api-key: gateway-key x-tenant: null - mtlsClientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- properties: name: description: A label for this credential set. Omit to leave it unchanged. @@ -60885,14 +62188,15 @@ components: x-tenant: null nullable: true type: object - mtlsClientSignedCert: - description: "PEM-encoded client certificate for mTLS. Must be a valid X.509\ - \ certificate inside its validity window. Omit to leave it unchanged,\ - \ or send `null` to remove it." - example: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- + webhookMtlsId: + description: "The id of the mTLS configuration presented to the token endpoint,\ + \ from `/v1/webhooks_settings/mtls`. Omit to leave it unchanged, or send\ + \ `null` to stop using mTLS for the token request. Requires the mTLS feature\ + \ to be enabled for the workspace (`403` otherwise), a configuration of\ + \ this workspace (`404` otherwise), and one linked to a private key (`400`\ + \ otherwise)." + example: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f + format: uuid nullable: true type: string type: object @@ -60919,13 +62223,9 @@ components: type: object UpdateWebhookRequest: example: + webhookMtlsId: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f webhookOauthId: 123e4567-e89b-12d3-a456-426614174000 description: This webhook is used for transactions notifications - mtls: - clientSignedCert: |- - -----BEGIN CERTIFICATE----- - ... - -----END CERTIFICATE----- url: https://example.com/webhook events: - transaction.created @@ -60962,8 +62262,15 @@ components: description: The status of the webhook example: false type: boolean - mtls: - $ref: "#/components/schemas/WebhookMtls" + webhookMtlsId: + description: "The id of the mTLS configuration this webhook presents when\ + \ delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may\ + \ share one configuration, so replacing its certificate covers all of\ + \ them at once. Send `null` to stop using mTLS for this webhook." + example: 6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f + format: uuid + nullable: true + type: string webhookOauthId: description: "The id of the OAuth credentials this webhook authenticates\ \ with, from `/v1/webhooks_settings/oauth`. Several webhooks may share\ @@ -68737,12 +70044,14 @@ components: enum: - DVP - PREFUNDED + - POST_TRADE type: string ExecutionRequestDetailsType: description: Execution type supported by the provider enum: - QUOTE - MARKET + - LIMIT type: string ManifestOrderInfo: description: Defines requirements for the POST /orders endpoint. @@ -69066,6 +70375,7 @@ components: - providerId: prov_8c3f1a4b2d6e9f7c accountId: acc_5e9a2d1c4b7f3e8a quoteAssetId: USD + baseAmount: "100.00" properties: scope: description: One or more providers/accounts to request rates from. At least @@ -69082,6 +70392,11 @@ components: description: The target asset identifier. example: USD type: string + baseAmount: + description: The amount to convert from + example: "100.00" + pattern: ^\d+(\.\d+)?$ + type: string required: - baseAssetId - quoteAssetId @@ -69975,7 +71290,8 @@ components: side: $ref: "#/components/schemas/Side" expiresAt: - description: The expiration time of the quote in ISO 8601 format. + description: | + The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. example: 2024-01-15T10:35:00.000Z type: string requiredParticipantsIdentificationOnOrder: @@ -70450,16 +71766,68 @@ components: type: RETRY count: 1 slippageBps: 50 + LimitTypeEnum: + description: Order type for limit orders + enum: + - LIMIT + type: string + FokTimeInForce: + description: "Fill-or-kill - the order must be filled in full at the limit price\ + \ immediately, or not at all." + example: + type: FOK + properties: + type: + description: Discriminator for the fill-or-kill time-in-force type. + enum: + - FOK + example: FOK + type: string + required: + - type + type: object + TimeInForce: + $ref: "#/components/schemas/FokTimeInForce" + LimitTypeDetails: + properties: + type: + $ref: "#/components/schemas/LimitTypeEnum" + price: + description: Limit price for the order + example: "60000.00" + type: string + timeInForce: + $ref: "#/components/schemas/FokTimeInForce" + required: + - price + - timeInForce + - type + type: object + LimitExecutionRequestDetails: + allOf: + - $ref: "#/components/schemas/LimitTypeDetails" + - $ref: "#/components/schemas/ExecutionRequestBaseDetails" + example: + type: LIMIT + price: "60000.00" + timeInForce: + type: FOK + baseAssetId: USD + quoteAssetId: BTC + side: BUY + baseAmount: "1000.00" ExecutionRequestDetails: description: Order execution details discriminator: mapping: MARKET: "#/components/schemas/MarketExecutionRequestDetails" QUOTE: "#/components/schemas/QuoteExecutionWithRequoteRequestDetails" + LIMIT: "#/components/schemas/LimitExecutionRequestDetails" propertyName: type oneOf: - $ref: "#/components/schemas/MarketExecutionRequestDetails" - $ref: "#/components/schemas/QuoteExecutionWithRequoteRequestDetails" + - $ref: "#/components/schemas/LimitExecutionRequestDetails" PrefundedSettlementType: enum: - PREFUNDED @@ -70479,16 +71847,33 @@ components: - destinationAccount - type type: object + PostTradeSettlementType: + enum: + - POST_TRADE + type: string + PostTradeSettlement: + description: | + Nothing moves on-platform; settlement happens bilaterally, provider-side, after execution. + example: + type: POST_TRADE + properties: + type: + $ref: "#/components/schemas/PostTradeSettlementType" + required: + - type + type: object Settlement: description: Settlement configuration for the order discriminator: mapping: PREFUNDED: "#/components/schemas/PrefundedSettlement" DVP: "#/components/schemas/DVPSettlement" + POST_TRADE: "#/components/schemas/PostTradeSettlement" propertyName: type oneOf: - $ref: "#/components/schemas/PrefundedSettlement" - $ref: "#/components/schemas/DVPSettlement" + - $ref: "#/components/schemas/PostTradeSettlement" ReasonForPaymentEnum: description: | The reason or purpose of the payment. Used by providers (e.g. CPN) that require a categorical reason for cross-border payment compliance and reporting. Optional at the API level; runtime enforcement is handled by the calling service against the provider's requirements. @@ -70752,15 +72137,32 @@ components: type: RETRY count: 1 slippageBps: 50 + LimitExecutionResponseDetails: + allOf: + - $ref: "#/components/schemas/LimitTypeDetails" + - $ref: "#/components/schemas/ExecutionResponseBaseDetails" + example: + type: LIMIT + price: "60000.00" + timeInForce: + type: FOK + side: BUY + baseAmount: "1000.00" + baseAssetId: USDC + baseAssetRail: BLOCKCHAIN + quoteAssetId: BTC + quoteAssetRail: BLOCKCHAIN ExecutionResponseDetails: discriminator: mapping: MARKET: "#/components/schemas/MarketExecutionResponseDetails" QUOTE: "#/components/schemas/QuoteExecutionWithRequoteResponseDetails" + LIMIT: "#/components/schemas/LimitExecutionResponseDetails" propertyName: type oneOf: - $ref: "#/components/schemas/MarketExecutionResponseDetails" - $ref: "#/components/schemas/QuoteExecutionWithRequoteResponseDetails" + - $ref: "#/components/schemas/LimitExecutionResponseDetails" BlockchainAddress: description: The blockchain address information. example: @@ -71974,6 +73376,11 @@ components: - DESTINATION_NOT_WHITELISTED - MISSING_DESTINATION_DETAILS - MISSING_WORKSPACE_DETAILS + - CREDIT_LIMIT_EXCEEDED + - QUOTE_EXPIRED + - DESK_REJECTED + - REQUOTE_WORSE_PRICE + - FOK_KILLED type: string Failure: properties: @@ -73089,13 +74496,11 @@ components: - approve type: object AddressRegistryTravelRuleProvider: - description: Travel Rule provider identifier (string enum value). - enum: - - TRAVEL_RULE_PROVIDER_NOTABENE - - TRAVEL_RULE_PROVIDER_SYGNA - - TRAVEL_RULE_PROVIDER_TRISA - - TRAVEL_RULE_PROVIDER_OPENVASP - example: TRAVEL_RULE_PROVIDER_NOTABENE + description: "Travel Rule provider short code (e.g. `NOTABENE`, `SYGNA`, `TRISA`,\ + \ `OPENVASP`). Plain string, not a fixed enum: the underlying provider list\ + \ is sourced from legal-entity-service and can grow over time without a spec\ + \ change here." + example: NOTABENE type: string AddressRegistryLegalEntity: description: Legal entity details for a blockchain address. @@ -73104,9 +74509,10 @@ components: entityName: ACME Corporation jurisdiction: US leiData: true + proofOfOwnershipAvailable: false travelRuleProviders: - - TRAVEL_RULE_PROVIDER_NOTABENE - - TRAVEL_RULE_PROVIDER_SYGNA + - NOTABENE + - SYGNA email: compliance@example.com properties: leiData: @@ -73130,8 +74536,8 @@ components: type: string travelRuleProviders: example: - - TRAVEL_RULE_PROVIDER_NOTABENE - - TRAVEL_RULE_PROVIDER_SYGNA + - NOTABENE + - SYGNA items: $ref: "#/components/schemas/AddressRegistryTravelRuleProvider" type: array @@ -73139,31 +74545,131 @@ components: description: Travel Rule contact email when available. example: compliance@example.com type: string + proofOfOwnershipAvailable: + description: Whether the caller can currently create a Proof of Ownership + PDF for this address (`POST /v1/address_registry/proof_of_ownership_exports`). + example: false + type: boolean required: - email - entityName - jurisdiction - lei - leiData + - proofOfOwnershipAvailable - travelRuleProviders type: object - AddressRegistryError: - description: Error body for address registry operations (4xx and 5xx). + AddressRegistryCreateProofOfOwnershipRequest: + description: Request body for creating an Address Registry Proof of Ownership + PDF export. example: - code: 2140 - message: Address registry opt-in required for this workspace. + address: 0x742d35cc6634c0532925a3b844bc9e7595f0beb0 properties: - code: - description: | - Application error code when present. For HTTP 400 on legal-entity lookup, distinguish: 4100 — request validation (e.g. missing, empty, or whitespace-only `address` after trim); 2140 — workspace not opted in to the address registry (`AR_OPT_IN_REQUIRED`). 2142 — not found (404). Other codes may appear, including on server errors. - example: 2140 - type: integer - message: - description: Human-readable error message - example: Address registry opt-in required for this workspace. + address: + description: "Blockchain address to prove ownership for (must resolve to\ + \ the caller's workspace). Same format expectations as the `address` path\ + \ parameter on `GET /v1/address_registry/legal_entities/{address}`." + example: 0x742d35cc6634c0532925a3b844bc9e7595f0beb0 type: string required: - - message + - address + type: object + AddressRegistryCreateProofOfOwnershipResponse: + description: "Address Registry Proof of Ownership PDF export, created successfully." + example: + verificationHash: BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA + pdf: !!binary |- + SlZCRVJpMHhMalFLLi4u + exportId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + expiresAt: 2027-08-17 + properties: + pdf: + description: "Base64-encoded Proof of Ownership PDF bytes. Fireblocks does\ + \ not store the PDF: save it immediately, there is no re-download route." + example: !!binary |- + SlZCRVJpMHhMalFLLi4u + format: byte + type: string + exportId: + description: Stable id of the online-verifiable export record. + example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + format: uuid + type: string + verificationHash: + description: Verification hash bound to the export (also printed on the + PDF). + example: BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA + type: string + expiresAt: + description: Inclusive last UTC calendar day online verification is available + (`YYYY-MM-DD`). + example: 2027-08-17 + type: string + required: + - expiresAt + - exportId + - pdf + - verificationHash + type: object + AddressRegistryVerifyProofOfOwnershipRequest: + description: Request body for verifying an Address Registry Proof of Ownership + export. + example: + verificationHash: BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA + address: 0x742d35cc6634c0532925a3b844bc9e7595f0beb0 + exportId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + expiresAt: 2027-08-17 + properties: + exportId: + description: Export id from create / the PDF. + example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + format: uuid + minLength: 1 + type: string + verificationHash: + description: Verification hash from create / the PDF (exact match required). + example: BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA + minLength: 1 + type: string + address: + description: Address from the PDF (exact UTF-8 match to the stored export). + example: 0x742d35cc6634c0532925a3b844bc9e7595f0beb0 + minLength: 1 + type: string + expiresAt: + description: "Optional but recommended: the PDF's \"Online verification\ + \ available until\" date (`YYYY-MM-DD`), which speeds up the lookup. A\ + \ wrong value yields `valid: false` even if the export exists — copy it\ + \ exactly from the PDF, or omit it." + example: 2027-08-17 + pattern: "^$|^\\d{4}-\\d{2}-\\d{2}$" + type: string + required: + - address + - exportId + - verificationHash + type: object + AddressRegistryVerifyProofOfOwnershipResponse: + description: "Online verification result. Authenticated calls always return\ + \ HTTP 200 with this body (`valid: true` or `valid: false`); unknown/expired\ + \ exports do not use 404." + example: + valid: true + expiresAt: 2027-08-17 + properties: + valid: + description: Whether the stored export matches the supplied verification + hash and address within retention. + example: true + type: boolean + expiresAt: + description: Inclusive last UTC calendar day (`YYYY-MM-DD`) when `valid` + is true; empty string when `valid` is false. + example: 2027-08-17 + type: string + required: + - expiresAt + - valid type: object AddressRegistryTenantRegistryResponse: description: "Workspace participation in the address registry. Same shape for\ @@ -77135,14 +78641,11 @@ components: - businessNumber - city - country - - description - incorporationCountry - isRegulated - legalName - legalStructure - - logo - name - - regulatoryAuthorities - website - yearFounded type: object @@ -77330,6 +78833,7 @@ components: description: The second line of the VASP's address (if applicable). May be null. example: Suite 10 + nullable: true type: string city: description: The city where the VASP is located. @@ -77353,6 +78857,7 @@ components: logo: description: URL to the logo of the VASP. May be null. example: https://fireblocks.com/logo.png + nullable: true type: string legalStructure: description: "The legal structure of the VASP (e.g., Corporation, LLC)." @@ -77379,6 +78884,7 @@ components: otherNames: description: Other names the VASP is known by. May be null. example: Fireblocks Test VASP + nullable: true type: string identificationType: description: The type of identification used by the VASP. @@ -77388,6 +78894,7 @@ components: description: The country of identification for the VASP (ISO-3166 Alpha-2 code). May be null. example: US + nullable: true type: string businessNumber: description: The business registration number of the VASP. @@ -77396,6 +78903,7 @@ components: regulatoryAuthorities: description: The regulatory authorities overseeing the VASP. May be null. example: "SEC, FINCEN" + nullable: true type: string jurisdictions: description: The jurisdictions where the VASP operates. @@ -77409,6 +78917,7 @@ components: street: description: The street name where the VASP is located. May be null. example: Wall Street + nullable: true type: string number: description: The building number of the VASP's address. May be returned @@ -77418,6 +78927,7 @@ components: unit: description: The unit or suite number of the VASP's address. May be null. example: Apt 2B + nullable: true type: string postCode: description: The postal code of the VASP's location. @@ -77516,25 +79026,30 @@ components: certificates: description: Certificates or licenses held by the VASP. May be null. example: ISO 27001 + nullable: true type: string description: description: A brief description of the VASP. May be null. example: A leading provider of crypto security solutions. + nullable: true type: string travelRule_OPENVASP: description: Travel rule compliance status for OpenVASP. Null when the VASP does not support this protocol. example: active + nullable: true type: string travelRule_SYGNA: description: Travel rule compliance status for Sygna. Null when the VASP does not support this protocol. example: inactive + nullable: true type: string travelRule_TRISA: description: Travel rule compliance status for TRISA. Null when the VASP does not support this protocol. example: pending + nullable: true type: string travelRule_TRLIGHT: description: Travel rule compliance status for TRLight. @@ -77544,21 +79059,25 @@ components: description: Travel rule compliance status for EMAIL. Null when the VASP does not support this protocol. example: inactive + nullable: true type: string travelRule_TRP: description: Travel rule compliance status for TRP. Null when the VASP does not support this protocol. example: active + nullable: true type: string travelRule_SHYFT: description: Travel rule compliance status for Shyft. Null when the VASP does not support this protocol. example: inactive + nullable: true type: string travelRule_USTRAVELRULEWG: description: Travel rule compliance status for US Travel Rule WG. Null when the VASP does not support this protocol. example: pending + nullable: true type: string createdAt: description: Timestamp when the VASP record was created. @@ -77567,6 +79086,7 @@ components: createdBy: description: The DID of the party that created the VASP record. May be null. example: did:ethr:0x19b5ff8440019b635a86bbb632db854f2ea80423 + nullable: true type: string updatedAt: description: Timestamp of the last update to the VASP record. @@ -77587,6 +79107,7 @@ components: documents: description: Documents associated with the VASP. May be null. example: "['license.pdf', 'compliance.pdf']" + nullable: true type: string hasAdmin: description: Indicates if the VASP has an admin. @@ -91786,6 +93307,86 @@ components: - status - type type: object + UtxoSelectionStrategyEnum: + description: "UTXO selection strategy. `ADAPTIVE` is recommended: the engine\ + \ chooses inputs at selection time. `ASC` spends smallest UTXOs first. `DESC`\ + \ spends largest first." + enum: + - ASC + - DESC + - ADAPTIVE + example: ADAPTIVE + type: string + UtxoSelectionConfigEntry: + description: Config row stored at exactly the requested scope. Omitted from + the parent object when none exists; the server does not emit JSON `null`. + example: + strategy: ADAPTIVE + updatedAt: 2026-09-09T15:00:00Z + properties: + strategy: + $ref: "#/components/schemas/UtxoSelectionStrategyEnum" + updatedAt: + description: Time at which this configured row was last updated. + example: 2026-09-09T15:00:00Z + format: date-time + type: string + required: + - strategy + - updatedAt + type: object + UtxoSelectionConfigSourceEnum: + description: Where the effective strategy was resolved from. `DEFAULT` means + no stored row applies at this scope or any scope it inherits from - `effective.strategy` + reports whichever strategy currently applies. `WORKSPACE` and `VAULT_ASSET` + are stored rows. + enum: + - DEFAULT + - WORKSPACE + - VAULT_ASSET + example: DEFAULT + type: string + EffectiveUtxoSelectionConfig: + example: + source: DEFAULT + strategy: ADAPTIVE + properties: + strategy: + $ref: "#/components/schemas/UtxoSelectionStrategyEnum" + source: + $ref: "#/components/schemas/UtxoSelectionConfigSourceEnum" + required: + - source + - strategy + type: object + UtxoSelectionConfigResponse: + description: "`effective` is always present. `configured` is omitted when no\ + \ row is stored at the requested scope (the server does not emit `\"configured\"\ + : null`). PUT responses always include `configured`." + example: + configured: + strategy: ADAPTIVE + updatedAt: 2026-09-09T15:00:00Z + effective: + source: DEFAULT + strategy: ADAPTIVE + properties: + configured: + $ref: "#/components/schemas/UtxoSelectionConfigEntry" + effective: + $ref: "#/components/schemas/EffectiveUtxoSelectionConfig" + required: + - effective + type: object + UpsertUtxoSelectionConfigRequest: + example: + strategy: ADAPTIVE + properties: + strategy: + $ref: "#/components/schemas/UtxoSelectionStrategyEnum" + required: + - strategy + type: object UtxoInput-2: example: index: 0 @@ -91981,8 +93582,11 @@ components: example: b70701f4-d7b1-4795-a8ee-b09cdb5b850e type: string txHash: - description: On-chain transaction hash + description: "On-chain transaction hash, in lowercase hex as the chain reports\ + \ it. Matched case-sensitively, so an uppercase hash is never found." example: b34f0c3ce612f1e5a5c19d6b1e6b5e3e7f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c + maxLength: 64 + pattern: "^[0-9a-fA-F]{1,64}$" type: string index: description: Output index (vout) @@ -92017,7 +93621,7 @@ components: description: List of UTXO identifiers to apply label changes to items: $ref: "#/components/schemas/UtxoIdentifier" - maxItems: 200 + maxItems: 50 minItems: 1 type: array labelsToAttach: @@ -92098,6 +93702,75 @@ components: $ref: "#/components/schemas/UtxoOutput" type: array type: object + UtxoLabelFailure: + description: "A requested identifier that blocked the label request, with the\ + \ reason it could not be labelled." + properties: + identifier: + allOf: + - $ref: "#/components/schemas/UtxoIdentifier" + description: The identifier exactly as it was sent in the request. + example: + txId: b70701f4-d7b1-4795-a8ee-b09cdb5b850e + reason: + description: |- + Why the identifier could not be labelled: + - `NOT_FOUND` — no UTXO for it in this vault and asset. Retrying can work once it is indexed. + - `NOT_LABELLABLE` — the UTXO exists but can no longer be labelled (spent, or removed; for a transaction ID, every output). Retrying will not help. + enum: + - NOT_FOUND + - NOT_LABELLABLE + - UNUSABLE_IDENTIFIER + example: NOT_LABELLABLE + type: string + utxoStatus: + description: |- + The UTXO status behind the reason, when one explains it. + With `NOT_FOUND`, `REMOVED` means the UTXO was removed within the last hour and may still reappear; + if it does not, the same request returns `NOT_LABELLABLE` after about an hour. + enum: + - SPENT + - REMOVED + example: SPENT + type: string + required: + - identifier + - reason + type: object + UtxoLabelsErrorResponse: + description: "Returned when a label request is rejected. The request is all-or-nothing,\ + \ so no UTXO was labelled." + example: + failures: + - identifier: + txId: b70701f4-d7b1-4795-a8ee-b09cdb5b850e + reason: NOT_LABELLABLE + utxoStatus: SPENT + message: "Cannot label the requested UTXOs: not labellable in its current\ + \ status: b70701f4-d7b1-4795-a8ee-b09cdb5b850e" + properties: + message: + description: "Summary of the rejection. When `failures` is present, it names\ + \ the identifiers that blocked the request." + example: "Cannot label the requested UTXOs: not labellable in its current\ + \ status: b70701f4-d7b1-4795-a8ee-b09cdb5b850e" + type: string + failures: + description: |- + Every identifier that blocked the request, each with its own reason. + Identifiers not listed were valid; resend them without the failed ones. + Absent when the request itself was invalid (e.g. a malformed label). + example: + - identifier: + txId: b70701f4-d7b1-4795-a8ee-b09cdb5b850e + reason: NOT_LABELLABLE + utxoStatus: SPENT + items: + $ref: "#/components/schemas/UtxoLabelFailure" + type: array + required: + - message + type: object LeiStatus: description: Approval status of a legal entity registration enum: @@ -93444,8 +95117,9 @@ components: description: Accept a DTCC end-investor onboarding offer. Carries no arguments. properties: responseType: - description: How you are answering the offer. Must be one of the values - currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + description: |- + How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. + `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. enum: - DTCC_END_INVESTOR_ONBOARDING_ACCEPT example: DTCC_END_INVESTOR_ONBOARDING_ACCEPT @@ -93458,8 +95132,9 @@ components: description: Reject a DTCC end-investor onboarding offer. properties: responseType: - description: How you are answering the offer. Must be one of the values - currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + description: |- + How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. + `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. enum: - DTCC_END_INVESTOR_ONBOARDING_REJECT example: DTCC_END_INVESTOR_ONBOARDING_REJECT @@ -93480,8 +95155,9 @@ components: description: Accept a Tradeweb co-signing delegation offer. Carries no arguments. properties: responseType: - description: How you are answering the offer. Must be one of the values - currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + description: |- + How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. + `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. enum: - TRADEWEB_COSIGNING_DELEGATION_ACCEPT example: TRADEWEB_COSIGNING_DELEGATION_ACCEPT @@ -93495,8 +95171,9 @@ components: \ — the DAR has nowhere on-ledger to record a reason, so none is accepted." properties: responseType: - description: How you are answering the offer. Must be one of the values - currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + description: |- + How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. + `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. enum: - TRADEWEB_COSIGNING_DELEGATION_REJECT example: TRADEWEB_COSIGNING_DELEGATION_REJECT @@ -93575,8 +95252,8 @@ components: description: Which offer domain this response belongs to. Selects the shape of `response`. enum: - - ALLOCATIONS - example: ALLOCATIONS + - ALLOCATION + example: ALLOCATION type: string response: $ref: "#/components/schemas/AllocationResponse" @@ -93626,8 +95303,8 @@ components: description: Which offer domain this response belongs to. Selects the shape of `response`. enum: - - TRANSFERS - example: TRANSFERS + - TRANSFER + example: TRANSFER type: string response: $ref: "#/components/schemas/TransferResponse" @@ -93639,8 +95316,8 @@ components: discriminator: mapping: ONBOARDING: "#/components/schemas/OfferResponseOnboarding" - ALLOCATIONS: "#/components/schemas/OfferResponseAllocation" - TRANSFERS: "#/components/schemas/OfferResponseTransfer" + ALLOCATION: "#/components/schemas/OfferResponseAllocation" + TRANSFER: "#/components/schemas/OfferResponseTransfer" propertyName: domain oneOf: - $ref: "#/components/schemas/OfferResponseOnboarding" @@ -93692,10 +95369,6 @@ components: description: DTCC infra operator party id. example: dtcc-operator::1220abc… type: string - provider: - description: DTCC provider party id. - example: dtcc-provider::1220abc… - type: string compliance: description: DTCC compliance party id. example: dtcc-compliance::1220abc… @@ -93708,13 +95381,19 @@ components: description: DTCC client onboarder party id — co-signs the accept. example: dtcc-onboarder::1220abc… type: string + upgrader: + description: "DTCC upgrader party id — the Model Upgrade Tool authority.\ + \ Supplied by DTCC during the off-chain registration, alongside the other\ + \ party ids." + example: dtcc-upgrader::1220abc… + type: string required: - asset - clientOnboarder - compliance - operator - - provider - registrar + - upgrader - vaultAccountId type: object CantonCallParticipantOnboarding: @@ -93859,17 +95538,6 @@ components: type: object AllocationWithdrawPayload: properties: - vaultAccountId: - description: The vault account whose Canton wallet acts here. - example: "12" - type: string - asset: - description: Chain asset — `CANTON` or `CANTON_TEST`. - enum: - - CANTON - - CANTON_TEST - example: CANTON - type: string allocationTransactionId: description: The Fireblocks transaction id of the outgoing response that created the allocation. The allocation is resolved from it — Canton contract @@ -93878,8 +95546,6 @@ components: type: string required: - allocationTransactionId - - asset - - vaultAccountId type: object CantonCallAllocationWithdraw: additionalProperties: false diff --git a/build.gradle b/build.gradle index 8e211dba..d43e483e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'eclipse' apply plugin: 'com.diffplug.spotless' group = 'com.fireblocks.sdk' -version = '32.0.0' +version = '0.0.0' buildscript { repositories { diff --git a/docs/AddressRegistryCreateProofOfOwnershipRequest.md b/docs/AddressRegistryCreateProofOfOwnershipRequest.md new file mode 100644 index 00000000..0b9bbba2 --- /dev/null +++ b/docs/AddressRegistryCreateProofOfOwnershipRequest.md @@ -0,0 +1,14 @@ + + +# AddressRegistryCreateProofOfOwnershipRequest + +Request body for creating an Address Registry Proof of Ownership PDF export. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**address** | **String** | Blockchain address to prove ownership for (must resolve to the caller's workspace). Same format expectations as the `address` path parameter on `GET /v1/address_registry/legal_entities/{address}`. | | + + + diff --git a/docs/AddressRegistryCreateProofOfOwnershipResponse.md b/docs/AddressRegistryCreateProofOfOwnershipResponse.md new file mode 100644 index 00000000..64274aad --- /dev/null +++ b/docs/AddressRegistryCreateProofOfOwnershipResponse.md @@ -0,0 +1,17 @@ + + +# AddressRegistryCreateProofOfOwnershipResponse + +Address Registry Proof of Ownership PDF export, created successfully. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**pdf** | **byte[]** | Base64-encoded Proof of Ownership PDF bytes. Fireblocks does not store the PDF: save it immediately, there is no re-download route. | | +|**exportId** | **UUID** | Stable id of the online-verifiable export record. | | +|**verificationHash** | **String** | Verification hash bound to the export (also printed on the PDF). | | +|**expiresAt** | **String** | Inclusive last UTC calendar day online verification is available (`YYYY-MM-DD`). | | + + + diff --git a/docs/AddressRegistryError.md b/docs/AddressRegistryError.md deleted file mode 100644 index 3b915c0a..00000000 --- a/docs/AddressRegistryError.md +++ /dev/null @@ -1,15 +0,0 @@ - - -# AddressRegistryError - -Error body for address registry operations (4xx and 5xx). - -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -|**code** | **Integer** | Application error code when present. For HTTP 400 on legal-entity lookup, distinguish: 4100 — request validation (e.g. missing, empty, or whitespace-only `address` after trim); 2140 — workspace not opted in to the address registry (`AR_OPT_IN_REQUIRED`). 2142 — not found (404). Other codes may appear, including on server errors. | [optional] | -|**message** | **String** | Human-readable error message | | - - - diff --git a/docs/AddressRegistryLegalEntity.md b/docs/AddressRegistryLegalEntity.md index ae155535..8be89fba 100644 --- a/docs/AddressRegistryLegalEntity.md +++ b/docs/AddressRegistryLegalEntity.md @@ -12,8 +12,9 @@ Legal entity details for a blockchain address. |**entityName** | **String** | Legal entity display name. | | |**jurisdiction** | **String** | Jurisdiction (e.g. ISO 3166-1 alpha-2 country code). | | |**lei** | **String** | Legal Entity Identifier when available. Empty when `leiData` is `false`. | | -|**travelRuleProviders** | **List<AddressRegistryTravelRuleProvider>** | | | +|**travelRuleProviders** | **List<String>** | | | |**email** | **String** | Travel Rule contact email when available. | | +|**proofOfOwnershipAvailable** | **Boolean** | Whether the caller can currently create a Proof of Ownership PDF for this address (`POST /v1/address_registry/proof_of_ownership_exports`). | | diff --git a/docs/AddressRegistryTravelRuleProvider.md b/docs/AddressRegistryTravelRuleProvider.md deleted file mode 100644 index e2a95a96..00000000 --- a/docs/AddressRegistryTravelRuleProvider.md +++ /dev/null @@ -1,17 +0,0 @@ - - -# AddressRegistryTravelRuleProvider - -## Enum - - -* `TRAVEL_RULE_PROVIDER_NOTABENE` (value: `"TRAVEL_RULE_PROVIDER_NOTABENE"`) - -* `TRAVEL_RULE_PROVIDER_SYGNA` (value: `"TRAVEL_RULE_PROVIDER_SYGNA"`) - -* `TRAVEL_RULE_PROVIDER_TRISA` (value: `"TRAVEL_RULE_PROVIDER_TRISA"`) - -* `TRAVEL_RULE_PROVIDER_OPENVASP` (value: `"TRAVEL_RULE_PROVIDER_OPENVASP"`) - - - diff --git a/docs/AddressRegistryVerifyProofOfOwnershipRequest.md b/docs/AddressRegistryVerifyProofOfOwnershipRequest.md new file mode 100644 index 00000000..fb598392 --- /dev/null +++ b/docs/AddressRegistryVerifyProofOfOwnershipRequest.md @@ -0,0 +1,17 @@ + + +# AddressRegistryVerifyProofOfOwnershipRequest + +Request body for verifying an Address Registry Proof of Ownership export. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**exportId** | **UUID** | Export id from create / the PDF. | | +|**verificationHash** | **String** | Verification hash from create / the PDF (exact match required). | | +|**address** | **String** | Address from the PDF (exact UTF-8 match to the stored export). | | +|**expiresAt** | **String** | Optional but recommended: the PDF's \"Online verification available until\" date (`YYYY-MM-DD`), which speeds up the lookup. A wrong value yields `valid: false` even if the export exists — copy it exactly from the PDF, or omit it. | [optional] | + + + diff --git a/docs/AddressRegistryVerifyProofOfOwnershipResponse.md b/docs/AddressRegistryVerifyProofOfOwnershipResponse.md new file mode 100644 index 00000000..3a591615 --- /dev/null +++ b/docs/AddressRegistryVerifyProofOfOwnershipResponse.md @@ -0,0 +1,15 @@ + + +# AddressRegistryVerifyProofOfOwnershipResponse + +Online verification result. Authenticated calls always return HTTP 200 with this body (`valid: true` or `valid: false`); unknown/expired exports do not use 404. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**valid** | **Boolean** | Whether the stored export matches the supplied verification hash and address within retention. | | +|**expiresAt** | **String** | Inclusive last UTC calendar day (`YYYY-MM-DD`) when `valid` is true; empty string when `valid` is false. | | + + + diff --git a/docs/AllocationWithdrawPayload.md b/docs/AllocationWithdrawPayload.md index cf6f3610..28d82ba5 100644 --- a/docs/AllocationWithdrawPayload.md +++ b/docs/AllocationWithdrawPayload.md @@ -7,18 +7,7 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**vaultAccountId** | **String** | The vault account whose Canton wallet acts here. | | -|**asset** | [**AssetEnum**](#AssetEnum) | Chain asset — `CANTON` or `CANTON_TEST`. | | |**allocationTransactionId** | **String** | The Fireblocks transaction id of the outgoing response that created the allocation. The allocation is resolved from it — Canton contract ids are never accepted here. | | -## Enum: AssetEnum - -| Name | Value | -|---- | -----| -| CANTON | "CANTON" | -| CANTON_TEST | "CANTON_TEST" | - - - diff --git a/docs/CantonCallDetails.md b/docs/CantonCallDetails.md new file mode 100644 index 00000000..8abe77c8 --- /dev/null +++ b/docs/CantonCallDetails.md @@ -0,0 +1,18 @@ + + +# CantonCallDetails + +A call made through the Canton calls endpoint. Written once and never changed. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**version** | **Integer** | The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding. | [optional] | +|**domain** | **CantonDomainEnum** | | [optional] | +|**type** | **String** | The call type, matching the `type` sent when the call was created. | [optional] | +|**vendor** | **CantonVendorEnum** | | [optional] | +|**originalTransactionId** | **String** | The transaction this call acts on. On a withdraw it is the allocation that was withdrawn, so the withdraw transaction read on its own still says what it withdrew. | [optional] | + + + diff --git a/docs/CantonDetails.md b/docs/CantonDetails.md new file mode 100644 index 00000000..102c674e --- /dev/null +++ b/docs/CantonDetails.md @@ -0,0 +1,16 @@ + + +# CantonDetails + +Canton transaction context. Present on transactions that belong to a Canton flow, and the authoritative signal that a transaction IS one — do not branch on `operation`, which is `CANTON_CALL` for customer-initiated calls but `TRANSFER` for an incoming Canton transfer offer. **No `cantonDetails` at all means the transaction is not a Canton item.** The service sets exactly one of `offerResponse`, `call` or `settlement`. That is a guarantee about what is sent, NOT a constraint this schema enforces: the three are declared as independent optional properties on purpose, so that a response carrying a block a client does not yet know about — or a row written before a block type existed — still validates. Response schemas here stay additive. Read the block you recognise; do not reject a payload for the shape of the others. Every block carries `version`, stamped when the transaction is created and never changed — a transaction written today keeps its shape, so `version` is how you know which shape you are reading. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**offerResponse** | [**CantonOfferResponseDetails**](CantonOfferResponseDetails.md) | | [optional] | +|**call** | [**CantonCallDetails**](CantonCallDetails.md) | | [optional] | +|**settlement** | [**CantonSettlementDetails**](CantonSettlementDetails.md) | | [optional] | + + + diff --git a/docs/CantonDomainEnum.md b/docs/CantonDomainEnum.md new file mode 100644 index 00000000..d4a47f76 --- /dev/null +++ b/docs/CantonDomainEnum.md @@ -0,0 +1,15 @@ + + +# CantonDomainEnum + +## Enum + + +* `ONBOARDING` (value: `"ONBOARDING"`) + +* `ALLOCATION` (value: `"ALLOCATION"`) + +* `TRANSFER` (value: `"TRANSFER"`) + + + diff --git a/docs/CantonOfferResponseDetails.md b/docs/CantonOfferResponseDetails.md new file mode 100644 index 00000000..7bcdb47f --- /dev/null +++ b/docs/CantonOfferResponseDetails.md @@ -0,0 +1,30 @@ + + +# CantonOfferResponseDetails + +The transaction belongs to an offer conversation: the offer itself, the response to it, or a leg that carries no answer of its own. The only block that changes over a transaction's lifetime. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**version** | **Integer** | The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding. | [optional] | +|**domain** | **CantonDomainEnum** | | [optional] | +|**vendor** | **CantonVendorEnum** | | [optional] | +|**availableResponses** | **List<String>** | The responses that can be sent for this offer right now. An empty array means nothing is answerable on this transaction — which is the difference between an actionable offer and a linked leg that shares its sub-status. | [optional] | +|**expiresAt** | **OffsetDateTime** | When the offer expires, where it has a deadline. | [optional] | +|**approvalTransactionId** | **String** | The response transaction, once one has been dispatched for this offer. | [optional] | +|**originalTransactionId** | **String** | The transaction this one relates to — the offer a response answered. | [optional] | +|**verdict** | [**VerdictEnum**](#VerdictEnum) | The outcome, set once the transaction reaches a terminal status. | [optional] | + + + +## Enum: VerdictEnum + +| Name | Value | +|---- | -----| +| ACCEPTED | "ACCEPTED" | +| REJECTED | "REJECTED" | + + + diff --git a/docs/CantonSettlementDetails.md b/docs/CantonSettlementDetails.md new file mode 100644 index 00000000..21485d7a --- /dev/null +++ b/docs/CantonSettlementDetails.md @@ -0,0 +1,17 @@ + + +# CantonSettlementDetails + +The credit side of a delivery-versus-payment: a venue settled an allocation. Written once, at creation — the transaction is already complete when it appears. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**version** | **Integer** | The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding. | [optional] | +|**domain** | **CantonDomainEnum** | | [optional] | +|**type** | **String** | The settlement type. | [optional] | +|**originalTransactionId** | **String** | The allocation this receipt settles. | [optional] | + + + diff --git a/docs/CantonVendorEnum.md b/docs/CantonVendorEnum.md new file mode 100644 index 00000000..b2d624b5 --- /dev/null +++ b/docs/CantonVendorEnum.md @@ -0,0 +1,13 @@ + + +# CantonVendorEnum + +## Enum + + +* `DTCC` (value: `"DTCC"`) + +* `TRADEWEB` (value: `"TRADEWEB"`) + + + diff --git a/docs/ComplianceApi.md b/docs/ComplianceApi.md index 5352fe39..caff9ade 100644 --- a/docs/ComplianceApi.md +++ b/docs/ComplianceApi.md @@ -8,6 +8,7 @@ All URIs are relative to https://developers.fireblocks.com/reference/ | [**activateByorkConfig**](ComplianceApi.md#activateByorkConfig) | **POST** /screening/byork/config/activate | Activate BYORK Light | | [**addAddressRegistryVaultOptOuts**](ComplianceApi.md#addAddressRegistryVaultOptOuts) | **POST** /address_registry/vaults | Add vault accounts to the address registry opt-out list | | [**assignVaultsToLegalEntity**](ComplianceApi.md#assignVaultsToLegalEntity) | **POST** /legal_entities/{legalEntityId}/vaults | Assign vault accounts to a legal entity | +| [**createAddressRegistryProofOfOwnership**](ComplianceApi.md#createAddressRegistryProofOfOwnership) | **POST** /address_registry/proof_of_ownership_exports | Create a Proof of Ownership PDF for an address | | [**createCounterpartyGroup**](ComplianceApi.md#createCounterpartyGroup) | **POST** /counterparty_groups | Create a counterparty group | | [**deactivateArsConfig**](ComplianceApi.md#deactivateArsConfig) | **POST** /screening/ars/config/deactivate | Deactivate ARS (Address Registry Screening) | | [**deactivateByorkConfig**](ComplianceApi.md#deactivateByorkConfig) | **POST** /screening/byork/config/deactivate | Deactivate BYORK Light | @@ -44,6 +45,7 @@ All URIs are relative to https://developers.fireblocks.com/reference/ | [**updateLegalEntity**](ComplianceApi.md#updateLegalEntity) | **PUT** /legal_entities/{legalEntityId} | Update legal entity | | [**updateScreeningConfiguration**](ComplianceApi.md#updateScreeningConfiguration) | **PUT** /screening/configurations | Tenant - Screening Configuration | | [**updateTravelRuleConfig**](ComplianceApi.md#updateTravelRuleConfig) | **PUT** /screening/travel_rule/policy_configuration | Update Travel Rule Configuration | +| [**verifyAddressRegistryProofOfOwnership**](ComplianceApi.md#verifyAddressRegistryProofOfOwnership) | **POST** /address_registry/proof_of_ownership_exports/verify | Verify a Proof of Ownership export | @@ -365,6 +367,91 @@ No authorization required | **0** | Error Response | * X-Request-ID -
| +## createAddressRegistryProofOfOwnership + +> CompletableFuture> createAddressRegistryProofOfOwnership createAddressRegistryProofOfOwnership(addressRegistryCreateProofOfOwnershipRequest, idempotencyKey) + +Create a Proof of Ownership PDF for an address + +Creates a Proof of Ownership PDF for a blockchain address owned by the authenticated workspace — for example, to share with a counterparty or bank as compliance evidence. Recipients can confirm it with `POST /v1/address_registry/proof_of_ownership_exports/verify`. Check `proofOfOwnershipAvailable` on `GET /v1/address_registry/legal_entities/{address}` first if you want to know whether create is likely to succeed. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.ComplianceApi; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + AddressRegistryCreateProofOfOwnershipRequest addressRegistryCreateProofOfOwnershipRequest = new AddressRegistryCreateProofOfOwnershipRequest(); // AddressRegistryCreateProofOfOwnershipRequest | + String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + try { + CompletableFuture> response = fireblocks.compliance().createAddressRegistryProofOfOwnership(addressRegistryCreateProofOfOwnershipRequest, idempotencyKey); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling ComplianceApi#createAddressRegistryProofOfOwnership"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **addressRegistryCreateProofOfOwnershipRequest** | [**AddressRegistryCreateProofOfOwnershipRequest**](AddressRegistryCreateProofOfOwnershipRequest.md)| | | +| **idempotencyKey** | **String**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | PDF export created | * X-Request-ID -
| +| **400** | - Missing, empty, or whitespace-only `address`. Error code 4100. - Workspace not opted in to the address registry. Error code 2140. | * X-Request-ID -
| +| **403** | This workspace is blocked from creating Proof of Ownership exports. Error code 2146. | * X-Request-ID -
| +| **404** | Address not found, not owned by this workspace, or not usable for export. Error code 2142. | * X-Request-ID -
| +| **429** | Rate limited. Error code 2145. Retry-safe after backing off. | * X-Request-ID -
| +| **500** | Internal error. No PDF is returned. Not retry-safe. Error code 2143. | * X-Request-ID -
| +| **503** | Rate-limit infrastructure temporarily unavailable. Safe to retry with backoff. Error code 2143 — same as the 500 case; use the HTTP status to tell them apart. | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## createCounterpartyGroup > CompletableFuture> createCounterpartyGroup createCounterpartyGroup(createCounterpartyGroupRequest, idempotencyKey) @@ -1434,8 +1521,10 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **200** | Legal entity found | * X-Request-ID -
| -| **400** | Bad request — either request validation (path `{address}` empty or whitespace-only after trim, e.g. encoded spaces only; numeric code 4100), or the authenticated workspace is not opted in to the address registry (numeric code 2140). The `message` field describes the failure; use `code` to distinguish. | * X-Request-ID -
| -| **404** | Not found (error code 2142) — unresolved address, no legal entity for a resolved address, or the same not-found outcome in other cases. | * X-Request-ID -
| +| **400** | - `{address}` empty or whitespace-only after trim. Error code 4100. - Workspace not opted in to the address registry. Error code 2140. | * X-Request-ID -
| +| **403** | This workspace is blocked from Address Registry public lookup. Error code 2146. | * X-Request-ID -
| +| **404** | Address not found, owner not opted in, or legal entity not usable for lookup. Error code 2142. | * X-Request-ID -
| +| **429** | Rate limited. Error code 2145. Retry-safe after backing off. | * X-Request-ID -
| | **0** | Error Response | * X-Request-ID -
| @@ -3167,3 +3256,83 @@ No authorization required |-------------|-------------|------------------| | **200** | Configuration updated successfully. | - | + +## verifyAddressRegistryProofOfOwnership + +> CompletableFuture> verifyAddressRegistryProofOfOwnership verifyAddressRegistryProofOfOwnership(addressRegistryVerifyProofOfOwnershipRequest, idempotencyKey) + +Verify a Proof of Ownership export + +Verifies a Proof of Ownership export against the record Fireblocks stored at creation. Returns `valid: false` (not 404) for an unknown, expired, or mismatched export. Available to any authenticated Fireblocks workspace, not just the export's original owner. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.ComplianceApi; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + AddressRegistryVerifyProofOfOwnershipRequest addressRegistryVerifyProofOfOwnershipRequest = new AddressRegistryVerifyProofOfOwnershipRequest(); // AddressRegistryVerifyProofOfOwnershipRequest | + String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + try { + CompletableFuture> response = fireblocks.compliance().verifyAddressRegistryProofOfOwnership(addressRegistryVerifyProofOfOwnershipRequest, idempotencyKey); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling ComplianceApi#verifyAddressRegistryProofOfOwnership"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **addressRegistryVerifyProofOfOwnershipRequest** | [**AddressRegistryVerifyProofOfOwnershipRequest**](AddressRegistryVerifyProofOfOwnershipRequest.md)| | | +| **idempotencyKey** | **String**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Verification result | * X-Request-ID -
| +| **400** | Missing, empty, or whitespace-only `exportId`, `verificationHash`, or `address`, or `expiresAt` not empty and not a valid `YYYY-MM-DD` date. Error code 4100. | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + diff --git a/docs/ConnectedAccountsBetaApi.md b/docs/ConnectedAccountsApi.md similarity index 86% rename from docs/ConnectedAccountsBetaApi.md rename to docs/ConnectedAccountsApi.md index b95d66df..6aa09458 100644 --- a/docs/ConnectedAccountsBetaApi.md +++ b/docs/ConnectedAccountsApi.md @@ -1,22 +1,22 @@ -# ConnectedAccountsBetaApi +# ConnectedAccountsApi All URIs are relative to https://developers.fireblocks.com/reference/ | Method | HTTP request | Description | |------------- | ------------- | -------------| -| [**addConnectedAccount**](ConnectedAccountsBetaApi.md#addConnectedAccount) | **POST** /connected_accounts | Add a connected account | -| [**disconnectConnectedAccount**](ConnectedAccountsBetaApi.md#disconnectConnectedAccount) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account | -| [**getConnectedAccount**](ConnectedAccountsBetaApi.md#getConnectedAccount) | **GET** /connected_accounts/{accountId} | Get connected account | -| [**getConnectedAccountAllowlist**](ConnectedAccountsBetaApi.md#getConnectedAccountAllowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account | -| [**getConnectedAccountAllowlistEntry**](ConnectedAccountsBetaApi.md#getConnectedAccountAllowlistEntry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account | -| [**getConnectedAccountBalances**](ConnectedAccountsBetaApi.md#getConnectedAccountBalances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account | -| [**getConnectedAccountRates**](ConnectedAccountsBetaApi.md#getConnectedAccountRates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account | -| [**getConnectedAccountTradingPairs**](ConnectedAccountsBetaApi.md#getConnectedAccountTradingPairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account | -| [**getConnectedAccounts**](ConnectedAccountsBetaApi.md#getConnectedAccounts) | **GET** /connected_accounts | Get connected accounts | -| [**getConnectedAccountsCredentialsPublicKey**](ConnectedAccountsBetaApi.md#getConnectedAccountsCredentialsPublicKey) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials | -| [**renameConnectedAccount**](ConnectedAccountsBetaApi.md#renameConnectedAccount) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account | -| [**syncConnectedAccountAllowlist**](ConnectedAccountsBetaApi.md#syncConnectedAccountAllowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account | -| [**updateConnectedAccountCredentials**](ConnectedAccountsBetaApi.md#updateConnectedAccountCredentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials | +| [**addConnectedAccount**](ConnectedAccountsApi.md#addConnectedAccount) | **POST** /connected_accounts | Add a connected account | +| [**disconnectConnectedAccount**](ConnectedAccountsApi.md#disconnectConnectedAccount) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account | +| [**getConnectedAccount**](ConnectedAccountsApi.md#getConnectedAccount) | **GET** /connected_accounts/{accountId} | Get connected account | +| [**getConnectedAccountAllowlist**](ConnectedAccountsApi.md#getConnectedAccountAllowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account | +| [**getConnectedAccountAllowlistEntry**](ConnectedAccountsApi.md#getConnectedAccountAllowlistEntry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account | +| [**getConnectedAccountBalances**](ConnectedAccountsApi.md#getConnectedAccountBalances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account | +| [**getConnectedAccountRates**](ConnectedAccountsApi.md#getConnectedAccountRates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account | +| [**getConnectedAccountTradingPairs**](ConnectedAccountsApi.md#getConnectedAccountTradingPairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account | +| [**getConnectedAccounts**](ConnectedAccountsApi.md#getConnectedAccounts) | **GET** /connected_accounts | Get connected accounts | +| [**getConnectedAccountsCredentialsPublicKey**](ConnectedAccountsApi.md#getConnectedAccountsCredentialsPublicKey) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials | +| [**renameConnectedAccount**](ConnectedAccountsApi.md#renameConnectedAccount) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account | +| [**syncConnectedAccountAllowlist**](ConnectedAccountsApi.md#syncConnectedAccountAllowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account | +| [**updateConnectedAccountCredentials**](ConnectedAccountsApi.md#updateConnectedAccountCredentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials | @@ -26,7 +26,7 @@ All URIs are relative to https://developers.fireblocks.com/reference/ Add a connected account -Creates a new connected account for the authenticated tenant. The `creds` field must be a Base64-encoded RSA-encrypted credential blob. Use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. The `providerType` is derived server-side from the `providerId` — callers do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. **Note:** This endpoint is currently in beta and might be subject to changes. +Creates a new connected account for the authenticated tenant. The `creds` field must be a Base64-encoded RSA-encrypted credential blob. Use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. The `providerType` is derived server-side from the `providerId` — callers do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. ### Example @@ -39,7 +39,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -54,13 +54,13 @@ public class Example { AddConnectedAccountRequest addConnectedAccountRequest = new AddConnectedAccountRequest(); // AddConnectedAccountRequest | String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().addConnectedAccount(addConnectedAccountRequest, idempotencyKey); + CompletableFuture> response = fireblocks.connectedAccounts().addConnectedAccount(addConnectedAccountRequest, idempotencyKey); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#addConnectedAccount"); + System.err.println("Exception when calling ConnectedAccountsApi#addConnectedAccount"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -110,7 +110,7 @@ No authorization required Disconnect connected account -Disconnect a connected account by ID. **Note**: - This endpoint is currently in beta and might be subject to changes. +Disconnect a connected account by ID. ### Example @@ -123,7 +123,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -137,12 +137,12 @@ public class Example { String accountId = "accountId_example"; // String | The ID of the account to disconnect. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().disconnectConnectedAccount(accountId); + CompletableFuture> response = fireblocks.connectedAccounts().disconnectConnectedAccount(accountId); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#disconnectConnectedAccount"); + System.err.println("Exception when calling ConnectedAccountsApi#disconnectConnectedAccount"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -186,7 +186,7 @@ No authorization required Get connected account -Retrieve detailed information about a specific connected account by ID. **Note:** This endpoint is currently in beta and might be subject to changes. +Retrieve detailed information about a specific connected account by ID. ### Example @@ -199,7 +199,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -213,13 +213,13 @@ public class Example { String accountId = "accountId_example"; // String | The ID of the account to fetch. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccount(accountId); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccount(accountId); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccount"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccount"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -263,7 +263,7 @@ No authorization required Get allowlist for connected account -Retrieves the address allowlist for a specified connected account. **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. +Retrieves the address allowlist for a specified connected account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. ### Example @@ -276,7 +276,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -297,13 +297,13 @@ public class Example { Integer pageSize = 56; // Integer | Maximum number of entries to return String order = "ASC"; // String | Sort order (ASC or DESC). try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountAllowlist(accountId, status, assetId, networkId, address, pageCursor, pageSize, order); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountAllowlist(accountId, status, assetId, networkId, address, pageCursor, pageSize, order); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccountAllowlist"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccountAllowlist"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -355,7 +355,7 @@ No authorization required Get a single allowlist entry for a connected account -Retrieves a single allowlist entry by its Fireblocks identifier for a specified connected account. **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. +Retrieves a single allowlist entry by its Fireblocks identifier for a specified connected account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. ### Example @@ -368,7 +368,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -383,13 +383,13 @@ public class Example { String accountId = "accountId_example"; // String | The connected account identifier String allowlistId = "allowlistId_example"; // String | The Fireblocks allowlist entry identifier try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountAllowlistEntry(accountId, allowlistId); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountAllowlistEntry(accountId, allowlistId); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccountAllowlistEntry"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccountAllowlistEntry"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -435,7 +435,7 @@ No authorization required Get balances for an account -Retrieve current asset balances for a specific connected account as a flat list (one row per `assetId`, `balanceType`). **Note:** This endpoint is currently in beta and might be subject to changes. +Retrieve current asset balances for a specific connected account as a flat list (one row per `assetId`, `balanceType`). ### Example @@ -448,7 +448,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -464,13 +464,13 @@ public class Example { Integer pageSize = 56; // Integer | Page size for pagination. String pageCursor = "pageCursor_example"; // String | Page cursor for pagination. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountBalances(accountId, pageSize, pageCursor); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountBalances(accountId, pageSize, pageCursor); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccountBalances"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccountBalances"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -516,7 +516,7 @@ No authorization required Get exchange rates for an account -Retrieve current exchange rates for converting between specific assets in a connected account. **Note:** This endpoint is currently in beta and might be subject to changes. +Retrieve current exchange rates for converting between specific assets in a connected account. ### Example @@ -529,7 +529,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -545,13 +545,13 @@ public class Example { String baseAssetId = "baseAssetId_example"; // String | The ID of the asset to fetch rates for. String quoteAssetId = "quoteAssetId_example"; // String | The ID of the asset to get the rates nominally. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountRates(accountId, baseAssetId, quoteAssetId); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountRates(accountId, baseAssetId, quoteAssetId); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccountRates"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccountRates"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -597,7 +597,7 @@ No authorization required Get supported trading pairs for an account -Retrieve all asset trading pairs supported by a specific connected account, including the pair type (`quote`, `market`, `onOffRamp`). **Note:** This endpoint is currently in beta and might be subject to changes. +Retrieve all asset trading pairs supported by a specific connected account, including the pair type (`quote`, `market`, `onOffRamp`). ### Example @@ -610,7 +610,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -626,13 +626,13 @@ public class Example { Integer pageSize = 100; // Integer | Page size for pagination. String pageCursor = "pageCursor_example"; // String | Page cursor for pagination. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountTradingPairs(accountId, pageSize, pageCursor); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountTradingPairs(accountId, pageSize, pageCursor); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccountTradingPairs"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccountTradingPairs"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -678,7 +678,7 @@ No authorization required Get connected accounts -Returns all connected accounts. **Note:** This endpoint is currently in beta and might be subject to changes. +Returns all connected accounts. ### Example @@ -691,7 +691,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -707,13 +707,13 @@ public class Example { Integer pageSize = 56; // Integer | Page size for pagination. String pageCursor = "pageCursor_example"; // String | Page cursor for pagination. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccounts(mainAccounts, pageSize, pageCursor); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccounts(mainAccounts, pageSize, pageCursor); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccounts"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccounts"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -759,7 +759,7 @@ No authorization required Get public key to encrypt connected account credentials -Returns the RSA public key used to encrypt the `creds` field before calling `POST /connected_accounts`. The key is a singleton resource scoped to the connected-accounts credentials domain — there is one per tenant context. **Note:** This endpoint is currently in beta and might be subject to changes. +Returns the RSA public key used to encrypt the `creds` field before calling `POST /connected_accounts`. The key is a singleton resource scoped to the connected-accounts credentials domain — there is one per tenant context. ### Example @@ -772,7 +772,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -785,13 +785,13 @@ public class Example { Fireblocks fireblocks = new Fireblocks(configurationOptions); try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().getConnectedAccountsCredentialsPublicKey(); + CompletableFuture> response = fireblocks.connectedAccounts().getConnectedAccountsCredentialsPublicKey(); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#getConnectedAccountsCredentialsPublicKey"); + System.err.println("Exception when calling ConnectedAccountsApi#getConnectedAccountsCredentialsPublicKey"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -832,7 +832,7 @@ No authorization required Rename Connected Account -Rename a connected account by account ID. **Note:** This endpoint is currently in beta and might be subject to changes. +Rename a connected account by account ID. ### Example @@ -845,7 +845,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -861,13 +861,13 @@ public class Example { String accountId = "accountId_example"; // String | The unique identifier of the connected account String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().renameConnectedAccount(renameConnectedAccountRequest, accountId, idempotencyKey); + CompletableFuture> response = fireblocks.connectedAccounts().renameConnectedAccount(renameConnectedAccountRequest, accountId, idempotencyKey); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#renameConnectedAccount"); + System.err.println("Exception when calling ConnectedAccountsApi#renameConnectedAccount"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -918,7 +918,7 @@ No authorization required Sync allowlist for connected account -Triggers an on-demand sync from the exchange, bypassing the cache and fetching live data immediately. **Rate limit:** 1 request per minute per connected account. **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. +Triggers an on-demand sync from the exchange, bypassing the cache and fetching live data immediately. **Rate limit:** 1 request per minute per connected account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. ### Example @@ -931,7 +931,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -946,12 +946,12 @@ public class Example { String accountId = "accountId_example"; // String | The connected account identifier String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().syncConnectedAccountAllowlist(accountId, idempotencyKey); + CompletableFuture> response = fireblocks.connectedAccounts().syncConnectedAccountAllowlist(accountId, idempotencyKey); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#syncConnectedAccountAllowlist"); + System.err.println("Exception when calling ConnectedAccountsApi#syncConnectedAccountAllowlist"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); @@ -996,7 +996,7 @@ No authorization required Update connected account credentials -Replace the API credentials (secret + API key) of a connected account. Credentials belong to an API key, which can back a single account or an entire hierarchy. Updating them affects all accounts sharing that key, so the endpoint returns an array of modified accounts. The `creds` field must be a Base64-encoded RSA-encrypted credential blob; use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. Both `creds` and `apiKey` are mandatory. Validation against the exchange is synchronous, but the update itself is **pending mobile approval** — the existing credentials stay live until the change is approved, so none of the affected accounts are disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. **Note:** This endpoint is currently in beta and might be subject to changes. +Replace the API credentials (secret + API key) of a connected account. Credentials belong to an API key, which can back a single account or an entire hierarchy. Updating them affects all accounts sharing that key, so the endpoint returns an array of modified accounts. The `creds` field must be a Base64-encoded RSA-encrypted credential blob; use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. Both `creds` and `apiKey` are mandatory. Validation against the exchange is synchronous, but the update itself is **pending mobile approval** — the existing credentials stay live until the change is approved, so none of the affected accounts are disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. ### Example @@ -1009,7 +1009,7 @@ import com.fireblocks.sdk.BasePath; import com.fireblocks.sdk.Fireblocks; import com.fireblocks.sdk.ConfigurationOptions; import com.fireblocks.sdk.model.*; -import com.fireblocks.sdk.api.ConnectedAccountsBetaApi; +import com.fireblocks.sdk.api.ConnectedAccountsApi; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -1025,13 +1025,13 @@ public class Example { String accountId = "2c96e3aa-07ca-4524-a026-75579d25e24a"; // String | The unique identifier of the connected account whose API key credentials are being replaced. String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. try { - CompletableFuture> response = fireblocks.connectedAccountsBeta().updateConnectedAccountCredentials(updateConnectedAccountCredentialsRequest, accountId, idempotencyKey); + CompletableFuture> response = fireblocks.connectedAccounts().updateConnectedAccountCredentials(updateConnectedAccountCredentialsRequest, accountId, idempotencyKey); System.out.println("Status code: " + response.get().getStatusCode()); System.out.println("Response headers: " + response.get().getHeaders()); System.out.println("Response body: " + response.get().getData()); } catch (InterruptedException | ExecutionException e) { ApiException apiException = (ApiException)e.getCause(); - System.err.println("Exception when calling ConnectedAccountsBetaApi#updateConnectedAccountCredentials"); + System.err.println("Exception when calling ConnectedAccountsApi#updateConnectedAccountCredentials"); System.err.println("Status code: " + apiException.getCode()); System.err.println("Response headers: " + apiException.getResponseHeaders()); System.err.println("Reason: " + apiException.getResponseBody()); diff --git a/docs/ConsoleUserApi.md b/docs/ConsoleUserApi.md index ca9b0087..cdeaf3d7 100644 --- a/docs/ConsoleUserApi.md +++ b/docs/ConsoleUserApi.md @@ -5,6 +5,7 @@ All URIs are relative to https://developers.fireblocks.com/reference/ | Method | HTTP request | Description | |------------- | ------------- | -------------| | [**createConsoleUser**](ConsoleUserApi.md#createConsoleUser) | **POST** /management/users | Create console user | +| [**deleteConsoleUser**](ConsoleUserApi.md#deleteConsoleUser) | **DELETE** /management/users/{id} | Request deletion of a console user | | [**getConsoleUsers**](ConsoleUserApi.md#getConsoleUsers) | **GET** /management/users | Get console users | @@ -91,6 +92,91 @@ No authorization required | **0** | Error Response | * X-Request-ID -
| +## deleteConsoleUser + +> CompletableFuture> deleteConsoleUser deleteConsoleUser(id, force) + +Request deletion of a console user + +Requests deletion of a console user. The request is asynchronous: it goes through the workspace's configured \"Delete users\" approval policy (Settings > Quorums), exactly as deleting a user from the console does, and the user is removed only once that approval completes. - Track progress by polling GET /management/users; deletion is complete when the user is disabled. - Please note that this endpoint is available only for API keys with Admin/Non Signing Admin permissions. Endpoint Permission: Admin, Non-Signing Admin. **Note:** This endpoint is currently in beta and might be subject to changes. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.ConsoleUserApi; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + String id = "id_example"; // String | The ID of the console user to delete + Boolean force = false; // Boolean | Acknowledges the impact of removing this user and proceeds anyway. Overrides both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way the acknowledgement checkbox does in the console. + try { + CompletableFuture> response = fireblocks.consoleUser().deleteConsoleUser(id, force); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling ConsoleUserApi#deleteConsoleUser"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **id** | **String**| The ID of the console user to delete | | +| **force** | **Boolean**| Acknowledges the impact of removing this user and proceeds anyway. Overrides both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way the acknowledgement checkbox does in the console. | [optional] [default to false] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **202** | Deletion request accepted. Returns the console user that will be removed once the workspace's configured approval completes. | * X-Request-ID -
| +| **401** | Unauthorized. Missing / invalid JWT token in Authorization header. | * X-Request-ID -
| +| **403** | Lacking permissions, or the target cannot be deleted: the user is the workspace Owner, or the caller is the target. | * X-Request-ID -
| +| **404** | Console user not found. Also returned for users in other workspaces and for API users, so the endpoint does not reveal whether an ID exists. | * X-Request-ID -
| +| **409** | PENDING_REQUEST_EXISTS - a deletion request for this user is already awaiting approval; USER_REFERENCED_IN_TAP - the user is referenced by the workspace transaction authorization policy (can be overridden with force=true); or USER_PENDING_ONBOARDING - the user has not completed onboarding, so there is nothing to delete yet. Revoke the invitation from the console instead. | * X-Request-ID -
| +| **422** | QUORUM_INTEGRITY - the user is required to complete the workspace's admin approval quorum. Can be overridden with force=true, matching the console's acknowledgement checkbox. | * X-Request-ID -
| +| **5XX** | Internal error. | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## getConsoleUsers > CompletableFuture> getConsoleUsers getConsoleUsers() diff --git a/docs/CreateWebhookMtlsConfigRequest.md b/docs/CreateWebhookMtlsConfigRequest.md new file mode 100644 index 00000000..4d31669e --- /dev/null +++ b/docs/CreateWebhookMtlsConfigRequest.md @@ -0,0 +1,14 @@ + + +# CreateWebhookMtlsConfigRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**name** | **String** | A label for this mTLS configuration, to tell several certificates apart. Letters, digits and spaces only. | [optional] | +|**signedCert** | **String** | Signed client certificate PEM, issued for the CSR from `GET /v1/webhooks_settings/mtls_csr`. The private key it belongs to is derived from the certificate itself. | | + + + diff --git a/docs/CreateWebhookOauthRequest.md b/docs/CreateWebhookOauthRequest.md index 2378e7e0..137e2270 100644 --- a/docs/CreateWebhookOauthRequest.md +++ b/docs/CreateWebhookOauthRequest.md @@ -16,7 +16,7 @@ A new reusable OAuth 2.0 client credential set. Attach it to a webhook by passin |**customJwtClaims** | **Map<String, Object>** | Extra claims for the JWT assertion. Used only when `authMethod` is `client_secret_jwt`. The usual one to set is `aud`, which defaults to the token endpoint URL; some authorization servers expect their own identifier instead. A value may be any JSON type except `null` — `null` is reserved for deleting a claim on update. `iss`, `sub`, `jti`, `iat` and `exp` are set by Fireblocks and cannot be overridden. Names are case-sensitive. The whole object must be under 16 KB. Values are write-only; responses return only the claim names. On update this merges claim by claim rather than replacing — see `WebhookOauthCustomJwtClaimsUpdate`. | [optional] | |**customBodyParams** | **Map<String, String>** | Extra parameters for the token request body — `scope` most commonly, sometimes `audience` or `resource`. Applies to every authentication method. Values must be strings, because the token request body is form-encoded rather than JSON. An empty string is allowed. `grant_type`, `client_id`, `client_secret`, `client_assertion` and `client_assertion_type` are set by Fireblocks and cannot be overridden. Names are case-sensitive. The whole object must be under 16 KB. Values are write-only; responses return only the parameter names. On update this merges key by key rather than replacing — see `WebhookOauthCustomBodyParamsUpdate`. | [optional] | |**customHeaders** | **Map<String, String>** | Extra HTTP headers for **the token request to your authorization server** — not for the webhook delivery, which has its own separate `customHeaders`. A gateway API key is the usual case. Values must be strings; an empty string is allowed. Names are matched case-insensitively, so two names differing only in case are a duplicate. Names are stored and returned lowercased, so `X-Api-Key` comes back as `x-api-key`. `Content-Type`, `Content-Length` and `Host` are set by Fireblocks and cannot be overridden. `Authorization` can be set with `client_secret_post` or `client_secret_jwt`, which send the credentials in the body — useful when your token endpoint sits behind a gateway. It is rejected with `client_secret_basic`, which sends the credentials in that header. Values have no length limit of their own; the whole object must be under 16 KB when serialized as UTF-8. Values are write-only; responses return only the header names. On update this merges name by name rather than replacing — see `WebhookOauthCustomHeadersUpdate`. | [optional] | -|**mtlsClientSignedCert** | **String** | PEM-encoded client certificate for mTLS when fetching tokens. Must be a valid X.509 certificate inside its validity window. | [optional] | +|**webhookMtlsId** | **UUID** | The id of the mTLS configuration presented to the token endpoint, from `/v1/webhooks_settings/mtls`. It can be the same configuration a webhook uses, so one certificate, signed from `GET /v1/webhooks_settings/mtls_csr`, serves both the token endpoint and the receiver. Omit, or send `null`, for a token request without mTLS. Requires the mTLS feature to be enabled for the workspace (`403` otherwise), a configuration of this workspace (`404` otherwise), and one linked to a private key (`400` otherwise). | [optional] | diff --git a/docs/CreateWebhookRequest.md b/docs/CreateWebhookRequest.md index 259b13f8..e5f874fe 100644 --- a/docs/CreateWebhookRequest.md +++ b/docs/CreateWebhookRequest.md @@ -11,7 +11,7 @@ |**description** | **String** | description of the webhook. should not contain special characters. | [optional] | |**events** | **List<WebhookEvent>** | event types the webhook will subscribe to | | |**enabled** | **Boolean** | The status of the webhook. If false, the webhook will not receive notifications. | [optional] | -|**mtls** | [**WebhookMtls**](WebhookMtls.md) | | [optional] | +|**webhookMtlsId** | **UUID** | The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so replacing its certificate covers all of them at once. Send `null` to stop using mTLS for this webhook. | [optional] | |**webhookOauthId** | **UUID** | The id of the OAuth credentials this webhook authenticates with, from `/v1/webhooks_settings/oauth`. Several webhooks may share one credential set, so rotating its client secret covers all of them at once. Send `null` to stop using OAuth for this webhook. Cannot be combined with an `authorization` custom header on the same webhook; a request that would leave both set is rejected. | [optional] | |**customHeaders** | **Map<String, Object>** | Custom HTTP headers attached to every notification delivered by this webhook. A value is a string, sent as one header line, or an array of strings, sent as one header line per element under the same name. `Cookie` and `Authorization` accept only a string. An empty array is rejected — leave the name out instead. At most 10 headers, counted by name — an array value counts once, however many lines it sends. Names must be valid HTTP header tokens, are case-insensitive, and are at most 128 characters. A value may be empty and has no length limit of its own; the whole object must be under 16 KB when serialized as UTF-8. A value that large may still be refused by your own endpoint, since web servers commonly cap the whole request header block at around 8 KB. Reserved names: `Host`, `Content-Type`, `Content-Length`, `Transfer-Encoding`, `Connection`, `User-Agent`, `Accept`, `Accept-Encoding`, `Fireblocks-Signature`, `Fireblocks-Webhook-Signature`. `Authorization` may be set, but not together with `webhookOauthId`; a request that would leave both set is rejected. Values are write-only; responses return only the header names. | [optional] | diff --git a/docs/DeleteWebhookMtlsConfigResponse.md b/docs/DeleteWebhookMtlsConfigResponse.md new file mode 100644 index 00000000..ef90dce9 --- /dev/null +++ b/docs/DeleteWebhookMtlsConfigResponse.md @@ -0,0 +1,21 @@ + + +# DeleteWebhookMtlsConfigResponse + +The deleted mTLS configuration, plus the ids of any webhooks and OAuth credentials the delete detached from it. They are only detached by `forceDelete=true`; without it a delete is refused with `409` while anything still references the configuration. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**id** | **UUID** | The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a webhook or on OAuth credentials. | | +|**name** | **String** | The label given to this mTLS configuration. | [optional] | +|**signedCert** | **String** | The signed client certificate PEM. | | +|**expiresAt** | **Long** | When the certificate itself expires, in milliseconds since the epoch. | | +|**createdAt** | **Long** | When the certificate was uploaded, in milliseconds since the epoch. | | +|**updatedAt** | **Long** | When this configuration was last changed, in milliseconds since the epoch. Differs from createdAt once the certificate has been replaced or the configuration renamed. | | +|**detachedWebhookIds** | **List<UUID>** | Webhooks whose `webhookMtlsId` was cleared. The webhooks themselves are not deleted and keep delivering, just without a client certificate. Empty unless `forceDelete=true` detached something. | | +|**detachedWebhookOauthIds** | **List<UUID>** | OAuth credentials whose `webhookMtlsId` was cleared. Their token requests continue without a client certificate. Empty unless `forceDelete=true` detached something. | | + + + diff --git a/docs/DeleteWebhookOauthResponse.md b/docs/DeleteWebhookOauthResponse.md index e544e32d..73152e55 100644 --- a/docs/DeleteWebhookOauthResponse.md +++ b/docs/DeleteWebhookOauthResponse.md @@ -16,7 +16,7 @@ The deleted OAuth credential set, plus the ids of any webhooks the delete detach |**customJwtClaims** | **List<String>** | Names of the additional claims placed in the JWT assertion. Claim values are write-only and are never returned. Absent when no custom claims are configured. | [optional] | |**customBodyParams** | **List<String>** | Names of the additional parameters added to the token request body. Parameter values are write-only and are never returned. Absent when no custom parameters are configured. | [optional] | |**customHeaders** | **List<String>** | Names of the additional HTTP headers added to **the token request sent to the authorization server** — not to the webhook delivery, which has its own separate `customHeaders`. Header values are write-only and are never returned. Absent when no custom headers are configured. | [optional] | -|**mtlsClientSignedCert** | **String** | PEM-encoded client certificate used for mTLS when fetching OAuth tokens. | [optional] | +|**webhookMtlsId** | **UUID** | The id of the mTLS configuration presented to the token endpoint. Absent when the token request does not use mTLS. Read the certificate from `/v1/webhooks_settings/mtls/{id}`. | [optional] | |**createdAt** | **Long** | The date and time the OAuth credentials were created, in milliseconds. | | |**updatedAt** | **Long** | The date and time the OAuth credentials were last updated, in milliseconds. | | |**detachedWebhookIds** | **List<UUID>** | Webhooks whose `webhookOauthId` was cleared. The webhooks themselves are not deleted and keep delivering, just without an `Authorization` header. Empty unless `forceDelete=true` detached something. | | diff --git a/docs/EffectiveUtxoSelectionConfig.md b/docs/EffectiveUtxoSelectionConfig.md new file mode 100644 index 00000000..ee456c00 --- /dev/null +++ b/docs/EffectiveUtxoSelectionConfig.md @@ -0,0 +1,14 @@ + + +# EffectiveUtxoSelectionConfig + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**strategy** | **UtxoSelectionStrategyEnum** | | | +|**source** | **UtxoSelectionConfigSourceEnum** | | | + + + diff --git a/docs/ExecutionRequestDetails.md b/docs/ExecutionRequestDetails.md index 81d9be22..14699bf7 100644 --- a/docs/ExecutionRequestDetails.md +++ b/docs/ExecutionRequestDetails.md @@ -5,6 +5,7 @@ Order execution details ## oneOf schemas +* [LimitExecutionRequestDetails](LimitExecutionRequestDetails.md) * [MarketExecutionRequestDetails](MarketExecutionRequestDetails.md) * [QuoteExecutionWithRequoteRequestDetails](QuoteExecutionWithRequoteRequestDetails.md) @@ -12,6 +13,7 @@ Order execution details ```java // Import classes: import com.fireblocks.sdk.model.ExecutionRequestDetails; +import com.fireblocks.sdk.model.LimitExecutionRequestDetails; import com.fireblocks.sdk.model.MarketExecutionRequestDetails; import com.fireblocks.sdk.model.QuoteExecutionWithRequoteRequestDetails; @@ -19,6 +21,13 @@ public class Example { public static void main(String[] args) { ExecutionRequestDetails exampleExecutionRequestDetails = new ExecutionRequestDetails(); + // create a new LimitExecutionRequestDetails + LimitExecutionRequestDetails exampleLimitExecutionRequestDetails = new LimitExecutionRequestDetails(); + // set ExecutionRequestDetails to LimitExecutionRequestDetails + exampleExecutionRequestDetails.setActualInstance(exampleLimitExecutionRequestDetails); + // to get back the LimitExecutionRequestDetails set earlier + LimitExecutionRequestDetails testLimitExecutionRequestDetails = (LimitExecutionRequestDetails) exampleExecutionRequestDetails.getActualInstance(); + // create a new MarketExecutionRequestDetails MarketExecutionRequestDetails exampleMarketExecutionRequestDetails = new MarketExecutionRequestDetails(); // set ExecutionRequestDetails to MarketExecutionRequestDetails diff --git a/docs/ExecutionRequestDetailsType.md b/docs/ExecutionRequestDetailsType.md index e69dc4d3..aee0c2af 100644 --- a/docs/ExecutionRequestDetailsType.md +++ b/docs/ExecutionRequestDetailsType.md @@ -9,5 +9,7 @@ * `MARKET` (value: `"MARKET"`) +* `LIMIT` (value: `"LIMIT"`) + diff --git a/docs/ExecutionResponseDetails.md b/docs/ExecutionResponseDetails.md index c0399a57..04307d28 100644 --- a/docs/ExecutionResponseDetails.md +++ b/docs/ExecutionResponseDetails.md @@ -3,6 +3,7 @@ # ExecutionResponseDetails ## oneOf schemas +* [LimitExecutionResponseDetails](LimitExecutionResponseDetails.md) * [MarketExecutionResponseDetails](MarketExecutionResponseDetails.md) * [QuoteExecutionWithRequoteResponseDetails](QuoteExecutionWithRequoteResponseDetails.md) @@ -10,6 +11,7 @@ ```java // Import classes: import com.fireblocks.sdk.model.ExecutionResponseDetails; +import com.fireblocks.sdk.model.LimitExecutionResponseDetails; import com.fireblocks.sdk.model.MarketExecutionResponseDetails; import com.fireblocks.sdk.model.QuoteExecutionWithRequoteResponseDetails; @@ -17,6 +19,13 @@ public class Example { public static void main(String[] args) { ExecutionResponseDetails exampleExecutionResponseDetails = new ExecutionResponseDetails(); + // create a new LimitExecutionResponseDetails + LimitExecutionResponseDetails exampleLimitExecutionResponseDetails = new LimitExecutionResponseDetails(); + // set ExecutionResponseDetails to LimitExecutionResponseDetails + exampleExecutionResponseDetails.setActualInstance(exampleLimitExecutionResponseDetails); + // to get back the LimitExecutionResponseDetails set earlier + LimitExecutionResponseDetails testLimitExecutionResponseDetails = (LimitExecutionResponseDetails) exampleExecutionResponseDetails.getActualInstance(); + // create a new MarketExecutionResponseDetails MarketExecutionResponseDetails exampleMarketExecutionResponseDetails = new MarketExecutionResponseDetails(); // set ExecutionResponseDetails to MarketExecutionResponseDetails diff --git a/docs/FailureReason.md b/docs/FailureReason.md index 870d7c3a..298dd88b 100644 --- a/docs/FailureReason.md +++ b/docs/FailureReason.md @@ -63,5 +63,15 @@ * `MISSING_WORKSPACE_DETAILS` (value: `"MISSING_WORKSPACE_DETAILS"`) +* `CREDIT_LIMIT_EXCEEDED` (value: `"CREDIT_LIMIT_EXCEEDED"`) + +* `QUOTE_EXPIRED` (value: `"QUOTE_EXPIRED"`) + +* `DESK_REJECTED` (value: `"DESK_REJECTED"`) + +* `REQUOTE_WORSE_PRICE` (value: `"REQUOTE_WORSE_PRICE"`) + +* `FOK_KILLED` (value: `"FOK_KILLED"`) + diff --git a/docs/FokTimeInForce.md b/docs/FokTimeInForce.md new file mode 100644 index 00000000..067b210c --- /dev/null +++ b/docs/FokTimeInForce.md @@ -0,0 +1,22 @@ + + +# FokTimeInForce + +Fill-or-kill - the order must be filled in full at the limit price immediately, or not at all. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**type** | [**TypeEnum**](#TypeEnum) | Discriminator for the fill-or-kill time-in-force type. | | + + + +## Enum: TypeEnum + +| Name | Value | +|---- | -----| +| FOK | "FOK" | + + + diff --git a/docs/LimitExecutionRequestDetails.md b/docs/LimitExecutionRequestDetails.md new file mode 100644 index 00000000..08d2fa26 --- /dev/null +++ b/docs/LimitExecutionRequestDetails.md @@ -0,0 +1,21 @@ + + +# LimitExecutionRequestDetails + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**type** | **LimitTypeEnum** | | | +|**price** | **String** | Limit price for the order | | +|**timeInForce** | [**FokTimeInForce**](FokTimeInForce.md) | | | +|**side** | **Side** | | | +|**baseAmount** | **String** | Amount in baseAssetId. BUY = base amount to receive; SELL = base amount to sell. | | +|**baseAssetId** | **String** | The asset you receive on BUY / give on SELL. | | +|**baseAssetRail** | **TransferRail** | | [optional] | +|**quoteAssetId** | **String** | Counter asset used to pay/receive | | +|**quoteAssetRail** | **TransferRail** | | [optional] | + + + diff --git a/docs/LimitExecutionResponseDetails.md b/docs/LimitExecutionResponseDetails.md new file mode 100644 index 00000000..7535edde --- /dev/null +++ b/docs/LimitExecutionResponseDetails.md @@ -0,0 +1,21 @@ + + +# LimitExecutionResponseDetails + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**type** | **LimitTypeEnum** | | | +|**price** | **String** | Limit price for the order | | +|**timeInForce** | [**FokTimeInForce**](FokTimeInForce.md) | | | +|**side** | **Side** | | | +|**baseAmount** | **String** | Amount to convert | | +|**baseAssetId** | **String** | Source asset identifier | | +|**baseAssetRail** | **TransferRail** | | [optional] | +|**quoteAssetId** | **String** | Target asset identifier | | +|**quoteAssetRail** | **TransferRail** | | [optional] | + + + diff --git a/docs/LimitTypeDetails.md b/docs/LimitTypeDetails.md new file mode 100644 index 00000000..e1486d4a --- /dev/null +++ b/docs/LimitTypeDetails.md @@ -0,0 +1,15 @@ + + +# LimitTypeDetails + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**type** | **LimitTypeEnum** | | | +|**price** | **String** | Limit price for the order | | +|**timeInForce** | [**FokTimeInForce**](FokTimeInForce.md) | | | + + + diff --git a/docs/LimitTypeEnum.md b/docs/LimitTypeEnum.md new file mode 100644 index 00000000..a13e2e95 --- /dev/null +++ b/docs/LimitTypeEnum.md @@ -0,0 +1,11 @@ + + +# LimitTypeEnum + +## Enum + + +* `LIMIT` (value: `"LIMIT"`) + + + diff --git a/docs/OfferResponseAllocation.md b/docs/OfferResponseAllocation.md index e206877f..7f5a2baf 100644 --- a/docs/OfferResponseAllocation.md +++ b/docs/OfferResponseAllocation.md @@ -16,7 +16,7 @@ | Name | Value | |---- | -----| -| ALLOCATIONS | "ALLOCATIONS" | +| ALLOCATION | "ALLOCATION" | diff --git a/docs/OfferResponseTransfer.md b/docs/OfferResponseTransfer.md index e65f3398..e916531f 100644 --- a/docs/OfferResponseTransfer.md +++ b/docs/OfferResponseTransfer.md @@ -16,7 +16,7 @@ | Name | Value | |---- | -----| -| TRANSFERS | "TRANSFERS" | +| TRANSFER | "TRANSFER" | diff --git a/docs/OnboardingResponseDtccAccept.md b/docs/OnboardingResponseDtccAccept.md index 66ad203f..e025042f 100644 --- a/docs/OnboardingResponseDtccAccept.md +++ b/docs/OnboardingResponseDtccAccept.md @@ -8,7 +8,7 @@ Accept a DTCC end-investor onboarding offer. Carries no arguments. | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | | +|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | | diff --git a/docs/OnboardingResponseDtccReject.md b/docs/OnboardingResponseDtccReject.md index 6f095713..a1b3299b 100644 --- a/docs/OnboardingResponseDtccReject.md +++ b/docs/OnboardingResponseDtccReject.md @@ -8,7 +8,7 @@ Reject a DTCC end-investor onboarding offer. | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | | +|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | | |**reason** | **String** | Why the offer is being rejected. Recorded on-chain, where the counterparty can read it. | | diff --git a/docs/OnboardingResponseTradewebAccept.md b/docs/OnboardingResponseTradewebAccept.md index e9ad851c..7aaa0ea4 100644 --- a/docs/OnboardingResponseTradewebAccept.md +++ b/docs/OnboardingResponseTradewebAccept.md @@ -8,7 +8,7 @@ Accept a Tradeweb co-signing delegation offer. Carries no arguments. | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | | +|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | | diff --git a/docs/OnboardingResponseTradewebReject.md b/docs/OnboardingResponseTradewebReject.md index 4fca5e42..a54785ac 100644 --- a/docs/OnboardingResponseTradewebReject.md +++ b/docs/OnboardingResponseTradewebReject.md @@ -8,7 +8,7 @@ Reject a Tradeweb co-signing delegation offer. Carries no arguments — the DAR | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | | +|**responseType** | [**ResponseTypeEnum**](#ResponseTypeEnum) | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | | diff --git a/docs/ParticipantOnboardingPayload.md b/docs/ParticipantOnboardingPayload.md index fc737fcd..ce2fc966 100644 --- a/docs/ParticipantOnboardingPayload.md +++ b/docs/ParticipantOnboardingPayload.md @@ -11,10 +11,10 @@ |**asset** | [**AssetEnum**](#AssetEnum) | Chain asset — CANTON or CANTON_TEST. | | |**expiresAt** | **OffsetDateTime** | When the onboarding request expires if it has not been answered. RFC 3339. | [optional] | |**operator** | **String** | DTCC infra operator party id. | | -|**provider** | **String** | DTCC provider party id. | | |**compliance** | **String** | DTCC compliance party id. | | |**registrar** | **String** | DTCC registrar party id — co-signs the accept. | | |**clientOnboarder** | **String** | DTCC client onboarder party id — co-signs the accept. | | +|**upgrader** | **String** | DTCC upgrader party id — the Model Upgrade Tool authority. Supplied by DTCC during the off-chain registration, alongside the other party ids. | | diff --git a/docs/PostTradeSettlement.md b/docs/PostTradeSettlement.md new file mode 100644 index 00000000..16ed1f28 --- /dev/null +++ b/docs/PostTradeSettlement.md @@ -0,0 +1,14 @@ + + +# PostTradeSettlement + +Nothing moves on-platform; settlement happens bilaterally, provider-side, after execution. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**type** | **PostTradeSettlementType** | | | + + + diff --git a/docs/PostTradeSettlementType.md b/docs/PostTradeSettlementType.md new file mode 100644 index 00000000..396f2d77 --- /dev/null +++ b/docs/PostTradeSettlementType.md @@ -0,0 +1,11 @@ + + +# PostTradeSettlementType + +## Enum + + +* `POST_TRADE` (value: `"POST_TRADE"`) + + + diff --git a/docs/Quote.md b/docs/Quote.md index aaba439d..d5537cc6 100644 --- a/docs/Quote.md +++ b/docs/Quote.md @@ -22,7 +22,7 @@ A committed executable quote for a trading pair. |**executionSteps** | [**List<QuoteExecutionStep>**](QuoteExecutionStep.md) | Ordered list of execution steps for the quote. | [optional] | |**generalFees** | [**List<Fee>**](Fee.md) | General fees associated with the quote. | [optional] | |**side** | **Side** | | | -|**expiresAt** | **String** | The expiration time of the quote in ISO 8601 format. | | +|**expiresAt** | **String** | The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. | | |**requiredParticipantsIdentificationOnOrder** | **String** | A JSON Schema Draft-7 document in string format describing the fields required when creating an order so clients can validate their order payload before sending. | [optional] | |**type** | [**TypeEnum**](#TypeEnum) | The type of the quote. | | diff --git a/docs/QuoteOffer.md b/docs/QuoteOffer.md index 810586e6..ec7aafa1 100644 --- a/docs/QuoteOffer.md +++ b/docs/QuoteOffer.md @@ -21,7 +21,7 @@ |**executionSteps** | [**List<QuoteExecutionStep>**](QuoteExecutionStep.md) | Ordered list of execution steps for the quote. | [optional] | |**generalFees** | [**List<Fee>**](Fee.md) | General fees associated with the quote. | [optional] | |**side** | **Side** | | | -|**expiresAt** | **String** | The expiration time of the quote in ISO 8601 format. | | +|**expiresAt** | **String** | The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. | | |**requiredParticipantsIdentificationOnOrder** | **String** | A JSON Schema Draft-7 document in string format describing the fields required when creating an order so clients can validate their order payload before sending. | [optional] | |**type** | [**TypeEnum**](#TypeEnum) | The type of the quote. | | |**offerType** | [**OfferTypeEnum**](#OfferTypeEnum) | The type of offer — QUOTE for executable committed quotes. | | diff --git a/docs/RatesRequest.md b/docs/RatesRequest.md index 1441cfae..d9539e65 100644 --- a/docs/RatesRequest.md +++ b/docs/RatesRequest.md @@ -10,6 +10,7 @@ |**scope** | [**List<ScopeItem>**](ScopeItem.md) | One or more providers/accounts to request rates from. At least one scope item is required. | | |**baseAssetId** | **String** | The source asset identifier. | | |**quoteAssetId** | **String** | The target asset identifier. | | +|**baseAmount** | **String** | The amount to convert from | [optional] | diff --git a/docs/Settlement.md b/docs/Settlement.md index 52e94570..bccecfd1 100644 --- a/docs/Settlement.md +++ b/docs/Settlement.md @@ -6,6 +6,7 @@ Settlement configuration for the order ## oneOf schemas * [DVPSettlement](DVPSettlement.md) +* [PostTradeSettlement](PostTradeSettlement.md) * [PrefundedSettlement](PrefundedSettlement.md) ## Example @@ -13,6 +14,7 @@ Settlement configuration for the order // Import classes: import com.fireblocks.sdk.model.Settlement; import com.fireblocks.sdk.model.DVPSettlement; +import com.fireblocks.sdk.model.PostTradeSettlement; import com.fireblocks.sdk.model.PrefundedSettlement; public class Example { @@ -26,6 +28,13 @@ public class Example { // to get back the DVPSettlement set earlier DVPSettlement testDVPSettlement = (DVPSettlement) exampleSettlement.getActualInstance(); + // create a new PostTradeSettlement + PostTradeSettlement examplePostTradeSettlement = new PostTradeSettlement(); + // set Settlement to PostTradeSettlement + exampleSettlement.setActualInstance(examplePostTradeSettlement); + // to get back the PostTradeSettlement set earlier + PostTradeSettlement testPostTradeSettlement = (PostTradeSettlement) exampleSettlement.getActualInstance(); + // create a new PrefundedSettlement PrefundedSettlement examplePrefundedSettlement = new PrefundedSettlement(); // set Settlement to PrefundedSettlement diff --git a/docs/SettlementTypeEnum.md b/docs/SettlementTypeEnum.md index 43c9a1f6..34d59b3a 100644 --- a/docs/SettlementTypeEnum.md +++ b/docs/SettlementTypeEnum.md @@ -9,5 +9,7 @@ * `PREFUNDED` (value: `"PREFUNDED"`) +* `POST_TRADE` (value: `"POST_TRADE"`) + diff --git a/docs/TransactionOperation.md b/docs/TransactionOperation.md index 3f6bcfa7..eb2c5204 100644 --- a/docs/TransactionOperation.md +++ b/docs/TransactionOperation.md @@ -23,5 +23,7 @@ * `ENABLE_ASSET` (value: `"ENABLE_ASSET"`) +* `CANTON_CALL` (value: `"CANTON_CALL"`) + diff --git a/docs/TransactionResponse.md b/docs/TransactionResponse.md index 9e2e6d10..db3dd7b9 100644 --- a/docs/TransactionResponse.md +++ b/docs/TransactionResponse.md @@ -31,6 +31,7 @@ |**feeInfo** | [**FeeInfo**](FeeInfo.md) | | [optional] | |**feeCurrency** | **String** | The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni. | [optional] | |**requestedFeeCurrency** | **String** | The fee-paying asset requested at transaction creation via the `feeCurrency` field, if any. | [optional] | +|**cantonDetails** | [**CantonDetails**](CantonDetails.md) | | [optional] | |**networkRecords** | [**List<NetworkRecord>**](NetworkRecord.md) | In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty. | [optional] | |**createdAt** | **BigDecimal** | The transaction’s creation date and time, in unix timestamp. | [optional] | |**lastUpdated** | **BigDecimal** | The transaction’s last update date and time, in unix timestamp. | [optional] | diff --git a/docs/TravelRuleIssuers.md b/docs/TravelRuleIssuers.md index 436953db..5525bdb9 100644 --- a/docs/TravelRuleIssuers.md +++ b/docs/TravelRuleIssuers.md @@ -9,9 +9,9 @@ |------------ | ------------- | ------------- | -------------| |**yearFounded** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | |**isRegulated** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | -|**regulatoryAuthorities** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | +|**regulatoryAuthorities** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | [optional] | |**name** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | -|**logo** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | +|**logo** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | [optional] | |**website** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | |**legalName** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | |**legalStructure** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | @@ -20,7 +20,7 @@ |**addressLine1** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | |**city** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | |**country** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | -|**description** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | | +|**description** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | [optional] | diff --git a/docs/UpdateWebhookMtlsConfigRequest.md b/docs/UpdateWebhookMtlsConfigRequest.md new file mode 100644 index 00000000..49a7353d --- /dev/null +++ b/docs/UpdateWebhookMtlsConfigRequest.md @@ -0,0 +1,15 @@ + + +# UpdateWebhookMtlsConfigRequest + +At least one property must be provided. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**name** | **String** | A new label for this mTLS configuration, or `null` to remove it. Letters, digits and spaces only. | [optional] | +|**signedCert** | **String** | A replacement signed certificate PEM. Every webhook and OAuth credentials set using this configuration switches to it, and the private key it was issued for is re-derived from the certificate. | [optional] | + + + diff --git a/docs/UpdateWebhookOauthRequest.md b/docs/UpdateWebhookOauthRequest.md index ebb4858b..b7a93bce 100644 --- a/docs/UpdateWebhookOauthRequest.md +++ b/docs/UpdateWebhookOauthRequest.md @@ -2,7 +2,7 @@ # UpdateWebhookOauthRequest -A partial update. Every field is optional and an omitted field is left as it is, so `{ \"clientSecret\": \"new-secret\" }` rotates the secret and changes nothing else. A rotation applies to every webhook referencing these credentials. The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `mtlsClientSignedCert` is a scalar, so `null` there removes it. +A partial update. Every field is optional and an omitted field is left as it is, so `{ \"clientSecret\": \"new-secret\" }` rotates the secret and changes nothing else. A rotation applies to every webhook referencing these credentials. The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `webhookMtlsId` is a scalar, so `null` there removes it. ## Properties @@ -16,7 +16,7 @@ A partial update. Every field is optional and an omitted field is left as it is, |**customJwtClaims** | **Map<String, Object>** | A delta applied to the JWT assertion claims. A claim with a value is added or replaced, a claim with `null` is deleted, and a claim you leave out is untouched. So `{ \"aud\": \"https://auth.example.com\", \"resource\": null }` sets `aud`, drops `resource`, and changes nothing else. Send `customJwtClaims: null` to clear every claim in one call. That does not collide with a `null` value on a name: one names the claim to delete, the other names the whole field. Same rules as on create: any JSON type except `null`, `iss`/`sub`/`jti`/`iat`/`exp` reserved, names case-sensitive, resulting set under 16 KB, values write-only. | [optional] | |**customBodyParams** | **Map<String, String>** | A delta applied to the token request body parameters. A parameter with a value is added or replaced, a parameter with `null` is deleted, and one you leave out is untouched. So `{ \"scope\": \"payments.read\", \"audience\": null }` sets `scope`, drops `audience`, and changes nothing else. Send `customBodyParams: null` to clear every parameter in one call. That does not collide with a `null` value on a name: one names the parameter to delete, the other names the whole field. Same rules as on create: string values only, `grant_type`/`client_id`/`client_secret`/ `client_assertion`/`client_assertion_type` reserved, names case-sensitive, resulting set under 16 KB, values write-only. | [optional] | |**customHeaders** | **Map<String, String>** | A delta applied to the token request headers — not the webhook delivery headers. A header with a value is added or replaced, a header with `null` is deleted, and one you leave out is untouched. So `{ \"X-Api-Key\": \"new-key\", \"X-Tenant\": null }` rotates `X-Api-Key`, drops `X-Tenant`, and changes nothing else. Send `customHeaders: null` to clear every header in one call. That does not collide with a `null` value on a name: one names the header to delete, the other names the whole field. Names are case-insensitive, so a `null` under one casing deletes a header stored under another, and names are stored and returned lowercased. Same rules as on create: string values only, `Content-Type`, `Content-Length` and `Host` reserved, `Authorization` only with `client_secret_post` or `client_secret_jwt`, resulting set under 16 KB, values write-only. | [optional] | -|**mtlsClientSignedCert** | **String** | PEM-encoded client certificate for mTLS. Must be a valid X.509 certificate inside its validity window. Omit to leave it unchanged, or send `null` to remove it. | [optional] | +|**webhookMtlsId** | **UUID** | The id of the mTLS configuration presented to the token endpoint, from `/v1/webhooks_settings/mtls`. Omit to leave it unchanged, or send `null` to stop using mTLS for the token request. Requires the mTLS feature to be enabled for the workspace (`403` otherwise), a configuration of this workspace (`404` otherwise), and one linked to a private key (`400` otherwise). | [optional] | diff --git a/docs/UpdateWebhookRequest.md b/docs/UpdateWebhookRequest.md index 9aef5482..5ba7b9f8 100644 --- a/docs/UpdateWebhookRequest.md +++ b/docs/UpdateWebhookRequest.md @@ -11,7 +11,7 @@ |**description** | **String** | description of the webhook of what it is used for.should not contain special characters. | [optional] | |**events** | **List<WebhookEvent>** | The events that the webhook will be subscribed to | [optional] | |**enabled** | **Boolean** | The status of the webhook | [optional] | -|**mtls** | [**WebhookMtls**](WebhookMtls.md) | | [optional] | +|**webhookMtlsId** | **UUID** | The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so replacing its certificate covers all of them at once. Send `null` to stop using mTLS for this webhook. | [optional] | |**webhookOauthId** | **UUID** | The id of the OAuth credentials this webhook authenticates with, from `/v1/webhooks_settings/oauth`. Several webhooks may share one credential set, so rotating its client secret covers all of them at once. Send `null` to stop using OAuth for this webhook. Cannot be combined with an `authorization` custom header on the same webhook; a request that would leave both set is rejected. | [optional] | |**customHeaders** | **Map<String, Object>** | A delta applied to the delivery headers. A header with a value is added or replaced, a header with `null` is deleted, and one you leave out is untouched. A value replaces what is stored under that name rather than adding to it, so an array is the complete new set of lines for that header. Send `customHeaders: null` to clear every header in one call. That does not collide with a `null` value on a name: one names the header to delete, the other names the whole field. Names are case-insensitive, so a `null` under one casing deletes a header stored under another. Same rules as on create: string or non-empty array, `Cookie` and `Authorization` string-only, 10 headers and under 16 KB in the resulting set, the same reserved names, and values write-only. Entries set to `null` do not count towards the limit. `Authorization` cannot be combined with `webhookOauthId`, though one request may add it and detach the credentials together. | [optional] | diff --git a/docs/UpsertUtxoSelectionConfigRequest.md b/docs/UpsertUtxoSelectionConfigRequest.md new file mode 100644 index 00000000..cfe01633 --- /dev/null +++ b/docs/UpsertUtxoSelectionConfigRequest.md @@ -0,0 +1,13 @@ + + +# UpsertUtxoSelectionConfigRequest + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**strategy** | **UtxoSelectionStrategyEnum** | | | + + + diff --git a/docs/UtxoIdentifier.md b/docs/UtxoIdentifier.md index a96f55de..c4b8eda2 100644 --- a/docs/UtxoIdentifier.md +++ b/docs/UtxoIdentifier.md @@ -9,7 +9,7 @@ Identifies a UTXO by either a Fireblocks transaction ID (targets all outputs of | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| |**txId** | **String** | Fireblocks transaction ID | [optional] | -|**txHash** | **String** | On-chain transaction hash | [optional] | +|**txHash** | **String** | On-chain transaction hash, in lowercase hex as the chain reports it. Matched case-sensitively, so an uppercase hash is never found. | [optional] | |**index** | **Integer** | Output index (vout) | [optional] | diff --git a/docs/UtxoLabelFailure.md b/docs/UtxoLabelFailure.md new file mode 100644 index 00000000..217837b8 --- /dev/null +++ b/docs/UtxoLabelFailure.md @@ -0,0 +1,35 @@ + + +# UtxoLabelFailure + +A requested identifier that blocked the label request, with the reason it could not be labelled. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**identifier** | [**UtxoIdentifier**](UtxoIdentifier.md) | The identifier exactly as it was sent in the request. | | +|**reason** | [**ReasonEnum**](#ReasonEnum) | Why the identifier could not be labelled: - `NOT_FOUND` — no UTXO for it in this vault and asset. Retrying can work once it is indexed. - `NOT_LABELLABLE` — the UTXO exists but can no longer be labelled (spent, or removed; for a transaction ID, every output). Retrying will not help. | | +|**utxoStatus** | [**UtxoStatusEnum**](#UtxoStatusEnum) | The UTXO status behind the reason, when one explains it. With `NOT_FOUND`, `REMOVED` means the UTXO was removed within the last hour and may still reappear; if it does not, the same request returns `NOT_LABELLABLE` after about an hour. | [optional] | + + + +## Enum: ReasonEnum + +| Name | Value | +|---- | -----| +| NOT_FOUND | "NOT_FOUND" | +| NOT_LABELLABLE | "NOT_LABELLABLE" | +| UNUSABLE_IDENTIFIER | "UNUSABLE_IDENTIFIER" | + + + +## Enum: UtxoStatusEnum + +| Name | Value | +|---- | -----| +| SPENT | "SPENT" | +| REMOVED | "REMOVED" | + + + diff --git a/docs/UtxoLabelsErrorResponse.md b/docs/UtxoLabelsErrorResponse.md new file mode 100644 index 00000000..c3d2f596 --- /dev/null +++ b/docs/UtxoLabelsErrorResponse.md @@ -0,0 +1,15 @@ + + +# UtxoLabelsErrorResponse + +Returned when a label request is rejected. The request is all-or-nothing, so no UTXO was labelled. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**message** | **String** | Summary of the rejection. When `failures` is present, it names the identifiers that blocked the request. | | +|**failures** | [**List<UtxoLabelFailure>**](UtxoLabelFailure.md) | Every identifier that blocked the request, each with its own reason. Identifiers not listed were valid; resend them without the failed ones. Absent when the request itself was invalid (e.g. a malformed label). | [optional] | + + + diff --git a/docs/UtxoManagementBetaApi.md b/docs/UtxoManagementBetaApi.md index 90b48b55..3558e89f 100644 --- a/docs/UtxoManagementBetaApi.md +++ b/docs/UtxoManagementBetaApi.md @@ -4,11 +4,88 @@ All URIs are relative to https://developers.fireblocks.com/reference/ | Method | HTTP request | Description | |------------- | ------------- | -------------| +| [**getUtxoSelectionConfig**](UtxoManagementBetaApi.md#getUtxoSelectionConfig) | **GET** /utxo_management/selection_config | Get UTXO selection config | | [**getUtxos**](UtxoManagementBetaApi.md#getUtxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) | +| [**getVaultAssetUtxoSelectionConfig**](UtxoManagementBetaApi.md#getVaultAssetUtxoSelectionConfig) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config | | [**updateUtxoLabels**](UtxoManagementBetaApi.md#updateUtxoLabels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs | +| [**upsertUtxoSelectionConfig**](UtxoManagementBetaApi.md#upsertUtxoSelectionConfig) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config | +| [**upsertVaultAssetUtxoSelectionConfig**](UtxoManagementBetaApi.md#upsertVaultAssetUtxoSelectionConfig) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config | +## getUtxoSelectionConfig + +> CompletableFuture> getUtxoSelectionConfig getUtxoSelectionConfig() + +Get UTXO selection config + +Returns the workspace-level configured selection strategy and the effective strategy after runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise `ASC`. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.UtxoManagementBetaApi; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + try { + CompletableFuture> response = fireblocks.utxoManagementBeta().getUtxoSelectionConfig(); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling UtxoManagementBetaApi#getUtxoSelectionConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + +This endpoint does not need any parameter. + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Current UTXO selection config | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## getUtxos > CompletableFuture> getUtxos getUtxos(vaultAccountId, assetId, pageCursor, pageSize, sort, order, includeAllLabels, includeAnyLabels, excludeAnyLabels, includeStatuses, address, txHash, txId, minAmount, maxAmount) @@ -114,13 +191,92 @@ No authorization required | **0** | Error Response | * X-Request-ID -
| +## getVaultAssetUtxoSelectionConfig + +> CompletableFuture> getVaultAssetUtxoSelectionConfig getVaultAssetUtxoSelectionConfig(vaultAccountId, assetId) + +Get vault and asset UTXO selection config + +Returns the config stored at this vault-and-asset scope, if any, and the effective strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and none is inherited from the workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this scope, otherwise `ASC`. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.UtxoManagementBetaApi; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + String vaultAccountId = "vaultAccountId_example"; // String | The ID of the vault account. + String assetId = "assetId_example"; // String | The ID of the asset + try { + CompletableFuture> response = fireblocks.utxoManagementBeta().getVaultAssetUtxoSelectionConfig(vaultAccountId, assetId); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling UtxoManagementBetaApi#getVaultAssetUtxoSelectionConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **vaultAccountId** | **String**| The ID of the vault account. | | +| **assetId** | **String**| The ID of the asset | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Current UTXO selection config | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## updateUtxoLabels > CompletableFuture> updateUtxoLabels updateUtxoLabels(attachDetachUtxoLabelsRequest, vaultAccountId, assetId, idempotencyKey) Attach or detach labels to/from UTXOs -Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. +Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. The request is all-or-nothing: if any identifier cannot be labelled, no UTXO is labelled and the request fails with `400`. The response lists every failed identifier in `failures`, each with its own `reason` — use it, not the status, to decide what to do: - `NOT_FOUND` — not found in this vault and asset. - `NOT_LABELLABLE` — spent, or removed, and can no longer be labelled. A UTXO removed within the last hour is reported as `NOT_FOUND` with `utxoStatus: REMOVED`; if it does not reappear, it becomes `NOT_LABELLABLE` after about an hour. A `400` without `failures` means the request itself is malformed. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. ### Example @@ -194,5 +350,168 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **200** | UTXOs with updated labels | * X-Request-ID -
| +| **400** | Some identifiers could not be labelled (listed in `failures`), or the request is malformed. No UTXO was labelled. | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + +## upsertUtxoSelectionConfig + +> CompletableFuture> upsertUtxoSelectionConfig upsertUtxoSelectionConfig(upsertUtxoSelectionConfigRequest, idempotencyKey) + +Upsert UTXO selection config + +Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.UtxoManagementBetaApi; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest = new UpsertUtxoSelectionConfigRequest(); // UpsertUtxoSelectionConfigRequest | + String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + try { + CompletableFuture> response = fireblocks.utxoManagementBeta().upsertUtxoSelectionConfig(upsertUtxoSelectionConfigRequest, idempotencyKey); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling UtxoManagementBetaApi#upsertUtxoSelectionConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **upsertUtxoSelectionConfigRequest** | [**UpsertUtxoSelectionConfigRequest**](UpsertUtxoSelectionConfigRequest.md)| | | +| **idempotencyKey** | **String**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Updated UTXO selection config | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + +## upsertVaultAssetUtxoSelectionConfig + +> CompletableFuture> upsertVaultAssetUtxoSelectionConfig upsertVaultAssetUtxoSelectionConfig(upsertUtxoSelectionConfigRequest, vaultAccountId, assetId, idempotencyKey) + +Upsert vault and asset UTXO selection config + +Creates or updates the UTXO selection strategy for this vault account and asset. `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.UtxoManagementBetaApi; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest = new UpsertUtxoSelectionConfigRequest(); // UpsertUtxoSelectionConfigRequest | + String vaultAccountId = "vaultAccountId_example"; // String | The ID of the vault account. + String assetId = "assetId_example"; // String | The ID of the asset + String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + try { + CompletableFuture> response = fireblocks.utxoManagementBeta().upsertVaultAssetUtxoSelectionConfig(upsertUtxoSelectionConfigRequest, vaultAccountId, assetId, idempotencyKey); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling UtxoManagementBetaApi#upsertVaultAssetUtxoSelectionConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **upsertUtxoSelectionConfigRequest** | [**UpsertUtxoSelectionConfigRequest**](UpsertUtxoSelectionConfigRequest.md)| | | +| **vaultAccountId** | **String**| The ID of the vault account. | | +| **assetId** | **String**| The ID of the asset | | +| **idempotencyKey** | **String**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Updated UTXO selection config | * X-Request-ID -
| | **0** | Error Response | * X-Request-ID -
| diff --git a/docs/UtxoSelectionConfigEntry.md b/docs/UtxoSelectionConfigEntry.md new file mode 100644 index 00000000..93988541 --- /dev/null +++ b/docs/UtxoSelectionConfigEntry.md @@ -0,0 +1,15 @@ + + +# UtxoSelectionConfigEntry + +Config row stored at exactly the requested scope. Omitted from the parent object when none exists; the server does not emit JSON `null`. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**strategy** | **UtxoSelectionStrategyEnum** | | | +|**updatedAt** | **OffsetDateTime** | Time at which this configured row was last updated. | | + + + diff --git a/docs/UtxoSelectionConfigResponse.md b/docs/UtxoSelectionConfigResponse.md new file mode 100644 index 00000000..cdd5f96b --- /dev/null +++ b/docs/UtxoSelectionConfigResponse.md @@ -0,0 +1,15 @@ + + +# UtxoSelectionConfigResponse + +`effective` is always present. `configured` is omitted when no row is stored at the requested scope (the server does not emit `\"configured\": null`). PUT responses always include `configured`. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**configured** | [**UtxoSelectionConfigEntry**](UtxoSelectionConfigEntry.md) | | [optional] | +|**effective** | [**EffectiveUtxoSelectionConfig**](EffectiveUtxoSelectionConfig.md) | | | + + + diff --git a/docs/UtxoSelectionConfigSourceEnum.md b/docs/UtxoSelectionConfigSourceEnum.md new file mode 100644 index 00000000..a7d2c92d --- /dev/null +++ b/docs/UtxoSelectionConfigSourceEnum.md @@ -0,0 +1,15 @@ + + +# UtxoSelectionConfigSourceEnum + +## Enum + + +* `DEFAULT` (value: `"DEFAULT"`) + +* `WORKSPACE` (value: `"WORKSPACE"`) + +* `VAULT_ASSET` (value: `"VAULT_ASSET"`) + + + diff --git a/docs/UtxoSelectionStrategyEnum.md b/docs/UtxoSelectionStrategyEnum.md new file mode 100644 index 00000000..9dc821e4 --- /dev/null +++ b/docs/UtxoSelectionStrategyEnum.md @@ -0,0 +1,15 @@ + + +# UtxoSelectionStrategyEnum + +## Enum + + +* `ASC` (value: `"ASC"`) + +* `DESC` (value: `"DESC"`) + +* `ADAPTIVE` (value: `"ADAPTIVE"`) + + + diff --git a/docs/Webhook.md b/docs/Webhook.md index 15ec34a5..df4bf1e4 100644 --- a/docs/Webhook.md +++ b/docs/Webhook.md @@ -14,7 +14,7 @@ |**status** | [**StatusEnum**](#StatusEnum) | The status of the webhook | | |**createdAt** | **Long** | The date and time the webhook was created in milliseconds | | |**updatedAt** | **Long** | The date and time the webhook was last updated in milliseconds | | -|**mtls** | [**WebhookMtls**](WebhookMtls.md) | | [optional] | +|**webhookMtlsId** | **UUID** | The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Absent when the webhook does not use mTLS. | [optional] | |**webhookOauthId** | **UUID** | The id of the OAuth credentials this webhook authenticates with. Absent when the webhook does not use OAuth. Read the credentials themselves from `/v1/webhooks_settings/oauth/{webhookOauthId}`. | [optional] | |**customHeaders** | **List<String>** | Names of the custom headers configured for this webhook. Header values are never returned. | [optional] | diff --git a/docs/WebhookMtls.md b/docs/WebhookMtls.md deleted file mode 100644 index 05d35423..00000000 --- a/docs/WebhookMtls.md +++ /dev/null @@ -1,14 +0,0 @@ - - -# WebhookMtls - -mTLS configuration for the webhook. On responses, present only when a signed client certificate is set. On requests, provide a signed client certificate to enable mTLS, or null to remove it. - -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -|**clientSignedCert** | **String** | Signed client certificate PEM used for mTLS when delivering notifications. | | - - - diff --git a/docs/WebhookMtlsConfig.md b/docs/WebhookMtlsConfig.md new file mode 100644 index 00000000..7c3ebeca --- /dev/null +++ b/docs/WebhookMtlsConfig.md @@ -0,0 +1,19 @@ + + +# WebhookMtlsConfig + +A signed client certificate stored for the workspace, and the id a webhook or OAuth credentials set references to use it. Several of them may share one configuration, so replacing the certificate here switches all of them at once. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**id** | **UUID** | The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a webhook or on OAuth credentials. | | +|**name** | **String** | The label given to this mTLS configuration. | [optional] | +|**signedCert** | **String** | The signed client certificate PEM. | | +|**expiresAt** | **Long** | When the certificate itself expires, in milliseconds since the epoch. | | +|**createdAt** | **Long** | When the certificate was uploaded, in milliseconds since the epoch. | | +|**updatedAt** | **Long** | When this configuration was last changed, in milliseconds since the epoch. Differs from createdAt once the certificate has been replaced or the configuration renamed. | | + + + diff --git a/docs/WebhookOauthCredentials.md b/docs/WebhookOauthCredentials.md index 84cadb35..3031e4e9 100644 --- a/docs/WebhookOauthCredentials.md +++ b/docs/WebhookOauthCredentials.md @@ -16,7 +16,7 @@ A stored OAuth 2.0 client credential set, referenced by webhooks through their ` |**customJwtClaims** | **List<String>** | Names of the additional claims placed in the JWT assertion. Claim values are write-only and are never returned. Absent when no custom claims are configured. | [optional] | |**customBodyParams** | **List<String>** | Names of the additional parameters added to the token request body. Parameter values are write-only and are never returned. Absent when no custom parameters are configured. | [optional] | |**customHeaders** | **List<String>** | Names of the additional HTTP headers added to **the token request sent to the authorization server** — not to the webhook delivery, which has its own separate `customHeaders`. Header values are write-only and are never returned. Absent when no custom headers are configured. | [optional] | -|**mtlsClientSignedCert** | **String** | PEM-encoded client certificate used for mTLS when fetching OAuth tokens. | [optional] | +|**webhookMtlsId** | **UUID** | The id of the mTLS configuration presented to the token endpoint. Absent when the token request does not use mTLS. Read the certificate from `/v1/webhooks_settings/mtls/{id}`. | [optional] | |**createdAt** | **Long** | The date and time the OAuth credentials were created, in milliseconds. | | |**updatedAt** | **Long** | The date and time the OAuth credentials were last updated, in milliseconds. | | diff --git a/docs/WebhooksV2Api.md b/docs/WebhooksV2Api.md index 70f74c67..8b665420 100644 --- a/docs/WebhooksV2Api.md +++ b/docs/WebhooksV2Api.md @@ -5,8 +5,10 @@ All URIs are relative to https://developers.fireblocks.com/reference/ | Method | HTTP request | Description | |------------- | ------------- | -------------| | [**createWebhook**](WebhooksV2Api.md#createWebhook) | **POST** /webhooks | Create a new webhook | +| [**createWebhookMtlsConfig**](WebhooksV2Api.md#createWebhookMtlsConfig) | **POST** /webhooks_settings/mtls | Create an mTLS configuration | | [**createWebhookOauth**](WebhooksV2Api.md#createWebhookOauth) | **POST** /webhooks_settings/oauth | Create OAuth credentials | | [**deleteWebhook**](WebhooksV2Api.md#deleteWebhook) | **DELETE** /webhooks/{webhookId} | Delete webhook | +| [**deleteWebhookMtlsConfig**](WebhooksV2Api.md#deleteWebhookMtlsConfig) | **DELETE** /webhooks_settings/mtls/{webhookMtlsId} | Delete an mTLS configuration | | [**deleteWebhookOauth**](WebhooksV2Api.md#deleteWebhookOauth) | **DELETE** /webhooks_settings/oauth/{webhookOauthId} | Delete OAuth credentials | | [**getMetrics**](WebhooksV2Api.md#getMetrics) | **GET** /webhooks/{webhookId}/metrics/{metricName} | Get webhook metrics | | [**getMtlsCsr**](WebhooksV2Api.md#getMtlsCsr) | **GET** /webhooks_settings/mtls_csr | Get mTLS CSR | @@ -16,6 +18,8 @@ All URIs are relative to https://developers.fireblocks.com/reference/ | [**getResendByQueryJobStatus**](WebhooksV2Api.md#getResendByQueryJobStatus) | **GET** /webhooks/{webhookId}/notifications/resend_by_query/jobs/{jobId} | Get resend by query job status | | [**getResendJobStatus**](WebhooksV2Api.md#getResendJobStatus) | **GET** /webhooks/{webhookId}/notifications/resend_failed/jobs/{jobId} | Get resend job status | | [**getWebhook**](WebhooksV2Api.md#getWebhook) | **GET** /webhooks/{webhookId} | Get webhook by id | +| [**getWebhookMtlsConfig**](WebhooksV2Api.md#getWebhookMtlsConfig) | **GET** /webhooks_settings/mtls/{webhookMtlsId} | Get an mTLS configuration by id | +| [**getWebhookMtlsConfigs**](WebhooksV2Api.md#getWebhookMtlsConfigs) | **GET** /webhooks_settings/mtls | List the uploaded mTLS configurations | | [**getWebhookOauth**](WebhooksV2Api.md#getWebhookOauth) | **GET** /webhooks_settings/oauth/{webhookOauthId} | Get OAuth credentials by id | | [**getWebhookOauths**](WebhooksV2Api.md#getWebhookOauths) | **GET** /webhooks_settings/oauth | Get all OAuth credentials | | [**getWebhooks**](WebhooksV2Api.md#getWebhooks) | **GET** /webhooks | Get all webhooks | @@ -24,6 +28,7 @@ All URIs are relative to https://developers.fireblocks.com/reference/ | [**resendNotificationsByQuery**](WebhooksV2Api.md#resendNotificationsByQuery) | **POST** /webhooks/{webhookId}/notifications/resend_by_query | Resend notifications by query | | [**resendNotificationsByResourceId**](WebhooksV2Api.md#resendNotificationsByResourceId) | **POST** /webhooks/{webhookId}/notifications/resend_by_resource | Resend notifications by resource Id | | [**updateWebhook**](WebhooksV2Api.md#updateWebhook) | **PATCH** /webhooks/{webhookId} | Update webhook | +| [**updateWebhookMtlsConfig**](WebhooksV2Api.md#updateWebhookMtlsConfig) | **PATCH** /webhooks_settings/mtls/{webhookMtlsId} | Update an mTLS configuration | | [**updateWebhookOauth**](WebhooksV2Api.md#updateWebhookOauth) | **PATCH** /webhooks_settings/oauth/{webhookOauthId} | Update OAuth credentials | @@ -107,6 +112,85 @@ No authorization required | **0** | Error Response | * X-Request-ID -
| +## createWebhookMtlsConfig + +> CompletableFuture> createWebhookMtlsConfig createWebhookMtlsConfig(createWebhookMtlsConfigRequest, idempotencyKey) + +Create an mTLS configuration + +Stores a certificate signed against the CSR from `GET /v1/webhooks_settings/mtls_csr` and returns its id, which is then set as `webhookMtlsId` on a webhook or on OAuth credentials. The private key the certificate was issued for is derived from the certificate, so it is never named by the caller. Re-uploading a certificate already stored returns the existing id rather than creating a second configuration, so several webhooks and OAuth credentials can share one certificate. A certificate that was not issued for a private key this workspace holds is rejected with a `400`. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.WebhooksV2Api; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + CreateWebhookMtlsConfigRequest createWebhookMtlsConfigRequest = new CreateWebhookMtlsConfigRequest(); // CreateWebhookMtlsConfigRequest | + String idempotencyKey = "idempotencyKey_example"; // String | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + try { + CompletableFuture> response = fireblocks.webhooksV2().createWebhookMtlsConfig(createWebhookMtlsConfigRequest, idempotencyKey); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling WebhooksV2Api#createWebhookMtlsConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **createWebhookMtlsConfigRequest** | [**CreateWebhookMtlsConfigRequest**](CreateWebhookMtlsConfigRequest.md)| | | +| **idempotencyKey** | **String**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | The stored mTLS configuration | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## createWebhookOauth > CompletableFuture> createWebhookOauth createWebhookOauth(createWebhookOauthRequest, idempotencyKey) @@ -263,6 +347,86 @@ No authorization required | **0** | Error Response | * X-Request-ID -
| +## deleteWebhookMtlsConfig + +> CompletableFuture> deleteWebhookMtlsConfig deleteWebhookMtlsConfig(webhookMtlsId, forceDelete) + +Delete an mTLS configuration + +Deletes an mTLS configuration. By default the delete is refused while the configuration is still in use: if any webhook or OAuth credentials reference it, nothing is deleted and the request fails with `409 Conflict`, naming the reason and listing the ids of what references it. This protects a shared configuration from being removed out from under the webhooks and token requests that depend on it. Pass `forceDelete=true` to delete anyway. That detaches everything referencing it — it clears `webhookMtlsId` on each webhook and OAuth credentials, it does **not** delete them — then deletes the configuration and returns the deleted resource together with `detachedWebhookIds` and `detachedWebhookOauthIds`. Detached webhooks keep delivering notifications, and detached OAuth credentials keep requesting tokens, but without a client certificate, so an endpoint that requires mTLS will reject them from that point on. When nothing references the configuration the delete succeeds either way, and both lists come back empty. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.WebhooksV2Api; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + UUID webhookMtlsId = UUID.fromString("44fcead0-7053-4831-a53a-df7fb90d440f"); // UUID | The unique identifier of the mTLS configuration + Boolean forceDelete = false; // Boolean | Delete the configuration even while webhooks or OAuth credentials still reference it, detaching them instead of refusing; their ids are returned in `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave it unset, or `false`, to get a `409 Conflict` whenever anything still references the configuration. + try { + CompletableFuture> response = fireblocks.webhooksV2().deleteWebhookMtlsConfig(webhookMtlsId, forceDelete); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling WebhooksV2Api#deleteWebhookMtlsConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **webhookMtlsId** | **UUID**| The unique identifier of the mTLS configuration | | +| **forceDelete** | **Boolean**| Delete the configuration even while webhooks or OAuth credentials still reference it, detaching them instead of refusing; their ids are returned in `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave it unset, or `false`, to get a `409 Conflict` whenever anything still references the configuration. | [optional] [default to false] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | The deleted mTLS configuration, plus the ids of any webhooks and OAuth credentials that were detached from it | * X-Request-ID -
| +| **409** | Webhooks or OAuth credentials still reference this configuration and `forceDelete` was not set. Nothing was deleted. The error message names the reason and the ids of what references it — detach those webhooks and OAuth credentials, or retry with `forceDelete=true`. | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## deleteWebhookOauth > CompletableFuture> deleteWebhookOauth deleteWebhookOauth(webhookOauthId, forceDelete) @@ -993,6 +1157,160 @@ No authorization required | **0** | Error Response | * X-Request-ID -
| +## getWebhookMtlsConfig + +> CompletableFuture> getWebhookMtlsConfig getWebhookMtlsConfig(webhookMtlsId) + +Get an mTLS configuration by id + +Retrieve one stored mTLS configuration by its id. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.WebhooksV2Api; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + UUID webhookMtlsId = UUID.fromString("44fcead0-7053-4831-a53a-df7fb90d440f"); // UUID | The unique identifier of the mTLS configuration + try { + CompletableFuture> response = fireblocks.webhooksV2().getWebhookMtlsConfig(webhookMtlsId); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling WebhooksV2Api#getWebhookMtlsConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **webhookMtlsId** | **UUID**| The unique identifier of the mTLS configuration | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | An mTLS configuration | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + +## getWebhookMtlsConfigs + +> CompletableFuture>> getWebhookMtlsConfigs getWebhookMtlsConfigs(ids) + +List the uploaded mTLS configurations + +Lists the workspace's mTLS configurations, newest first. Pass `ids` to ask about particular ones instead — useful for resolving the `webhookMtlsId` values on a set of webhooks in one call. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.WebhooksV2Api; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + List ids = Arrays.asList(); // List | Return only the configurations with these ids, instead of all of them. Repeat the parameter for each id. An id belonging to another workspace, or to nothing, is left out of the response rather than failing the request. + try { + CompletableFuture>> response = fireblocks.webhooksV2().getWebhookMtlsConfigs(ids); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling WebhooksV2Api#getWebhookMtlsConfigs"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **ids** | [**List<UUID>**](UUID.md)| Return only the configurations with these ids, instead of all of them. Repeat the parameter for each id. An id belonging to another workspace, or to nothing, is left out of the response rather than failing the request. | [optional] | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | The workspace's mTLS configurations | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## getWebhookOauth > CompletableFuture> getWebhookOauth getWebhookOauth(webhookOauthId) @@ -1627,13 +1945,93 @@ No authorization required | **0** | Error Response | * X-Request-ID -
| +## updateWebhookMtlsConfig + +> CompletableFuture> updateWebhookMtlsConfig updateWebhookMtlsConfig(updateWebhookMtlsConfigRequest, webhookMtlsId) + +Update an mTLS configuration + +Renames a configuration, replaces its certificate, or both. Only the fields present in the request are changed; anything omitted is left as it is, and a request with neither field is rejected with a `400`. Replacing `signedCert` switches every webhook and OAuth credentials set using this configuration over to the new certificate in one write, and the private key it was issued for is re-derived from the certificate. A replacement that was not issued for a private key this workspace holds is rejected with a `400`. Sending `name: null` removes the label. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + +### Example + +```java +// Import classes: +import com.fireblocks.sdk.ApiClient; +import com.fireblocks.sdk.ApiException; +import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.BasePath; +import com.fireblocks.sdk.Fireblocks; +import com.fireblocks.sdk.ConfigurationOptions; +import com.fireblocks.sdk.model.*; +import com.fireblocks.sdk.api.WebhooksV2Api; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +public class Example { + public static void main(String[] args) { + ConfigurationOptions configurationOptions = new ConfigurationOptions() + .basePath(BasePath.Sandbox) + .apiKey("my-api-key") + .secretKey("my-secret-key"); + Fireblocks fireblocks = new Fireblocks(configurationOptions); + + UpdateWebhookMtlsConfigRequest updateWebhookMtlsConfigRequest = new UpdateWebhookMtlsConfigRequest(); // UpdateWebhookMtlsConfigRequest | + UUID webhookMtlsId = UUID.fromString("44fcead0-7053-4831-a53a-df7fb90d440f"); // UUID | The unique identifier of the mTLS configuration + try { + CompletableFuture> response = fireblocks.webhooksV2().updateWebhookMtlsConfig(updateWebhookMtlsConfigRequest, webhookMtlsId); + System.out.println("Status code: " + response.get().getStatusCode()); + System.out.println("Response headers: " + response.get().getHeaders()); + System.out.println("Response body: " + response.get().getData()); + } catch (InterruptedException | ExecutionException e) { + ApiException apiException = (ApiException)e.getCause(); + System.err.println("Exception when calling WebhooksV2Api#updateWebhookMtlsConfig"); + System.err.println("Status code: " + apiException.getCode()); + System.err.println("Response headers: " + apiException.getResponseHeaders()); + System.err.println("Reason: " + apiException.getResponseBody()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **updateWebhookMtlsConfigRequest** | [**UpdateWebhookMtlsConfigRequest**](UpdateWebhookMtlsConfigRequest.md)| | | +| **webhookMtlsId** | **UUID**| The unique identifier of the mTLS configuration | | + +### Return type + +CompletableFuture> + + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | The updated mTLS configuration | * X-Request-ID -
| +| **400** | Neither `name` nor `signedCert` was provided, so there is nothing to change, or the replacement certificate was rejected — it is not valid X.509, or it was not issued for a private key this workspace holds. | * X-Request-ID -
| +| **0** | Error Response | * X-Request-ID -
| + + ## updateWebhookOauth > CompletableFuture> updateWebhookOauth updateWebhookOauth(updateWebhookOauthRequest, webhookOauthId) Update OAuth credentials -Updates only the fields present in the request; anything omitted is left as it is. Sending `clientSecret` on its own rotates the secret for every webhook using these credentials. `customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `mtlsClientSignedCert` is a scalar rather than a map, so `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. +Updates only the fields present in the request; anything omitted is left as it is. Sending `clientSecret` on its own rotates the secret for every webhook using these credentials. `customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `webhookMtlsId` is a scalar rather than a map, so `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. ### Example diff --git a/pom.xml b/pom.xml index c0bbd514..5c58d835 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ fireblocks-sdk jar fireblocks-sdk - 32.0.0 + 0.0.0 https://github.com/fireblocks/java-sdk The Fireblocks Official SDK is a comprehensive software development kit that enables seamless integration and interaction with the Fireblocks platform. Fireblocks is a cutting-edge blockchain infrastructure platform that provides secure and scalable solutions for managing digital assets and transactions. This SDK empowers developers to build robust applications that can interact with the Fireblocks platform's features, including creating and managing vault accounts, initiating secure transactions, managing assets, and more. It abstracts complex interactions with the Fireblocks API, making it easier for developers to leverage the platform's capabilities while adhering to best practices in security and efficiency. diff --git a/src/main/java/com/fireblocks/sdk/Configuration.java b/src/main/java/com/fireblocks/sdk/Configuration.java index c0dd0226..aa53bae8 100644 --- a/src/main/java/com/fireblocks/sdk/Configuration.java +++ b/src/main/java/com/fireblocks/sdk/Configuration.java @@ -21,7 +21,7 @@ value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.14.0") public class Configuration { - public static final String VERSION = "32.0.0"; + public static final String VERSION = "0.0.0"; private static final AtomicReference defaultApiClient = new AtomicReference<>(); private static volatile Supplier apiClientFactory = ApiClient::new; diff --git a/src/main/java/com/fireblocks/sdk/Fireblocks.java b/src/main/java/com/fireblocks/sdk/Fireblocks.java index f1c0703f..22d98563 100644 --- a/src/main/java/com/fireblocks/sdk/Fireblocks.java +++ b/src/main/java/com/fireblocks/sdk/Fireblocks.java @@ -44,7 +44,7 @@ public class Fireblocks { private ComplianceApi compliance; private ComplianceOrchestratorBetaApi complianceOrchestratorBeta; private ComplianceScreeningConfigurationApi complianceScreeningConfiguration; - private ConnectedAccountsBetaApi connectedAccountsBeta; + private ConnectedAccountsApi connectedAccounts; private ConsoleUserApi consoleUser; private ContactsApi contacts; private ContractInteractionsApi contractInteractions; @@ -287,11 +287,11 @@ public ComplianceScreeningConfigurationApi complianceScreeningConfiguration() { return complianceScreeningConfiguration; } - public ConnectedAccountsBetaApi connectedAccountsBeta() { - if (connectedAccountsBeta == null) { - connectedAccountsBeta = new ConnectedAccountsBetaApi(apiClient); + public ConnectedAccountsApi connectedAccounts() { + if (connectedAccounts == null) { + connectedAccounts = new ConnectedAccountsApi(apiClient); } - return connectedAccountsBeta; + return connectedAccounts; } public ConsoleUserApi consoleUser() { diff --git a/src/main/java/com/fireblocks/sdk/api/ComplianceApi.java b/src/main/java/com/fireblocks/sdk/api/ComplianceApi.java index 79d9efe9..c4e2b430 100644 --- a/src/main/java/com/fireblocks/sdk/api/ComplianceApi.java +++ b/src/main/java/com/fireblocks/sdk/api/ComplianceApi.java @@ -22,6 +22,8 @@ import com.fireblocks.sdk.ValidationUtils; import com.fireblocks.sdk.model.AddressRegistryAddVaultOptOutsRequest; import com.fireblocks.sdk.model.AddressRegistryAddVaultOptOutsResponse; +import com.fireblocks.sdk.model.AddressRegistryCreateProofOfOwnershipRequest; +import com.fireblocks.sdk.model.AddressRegistryCreateProofOfOwnershipResponse; import com.fireblocks.sdk.model.AddressRegistryGetVaultOptOutResponse; import com.fireblocks.sdk.model.AddressRegistryLegalEntity; import com.fireblocks.sdk.model.AddressRegistryListVaultOptOutsResponse; @@ -29,6 +31,8 @@ import com.fireblocks.sdk.model.AddressRegistryRemoveVaultOptOutResponse; import com.fireblocks.sdk.model.AddressRegistryTenantRegistryResponse; import com.fireblocks.sdk.model.AddressRegistryVaultListOrder; +import com.fireblocks.sdk.model.AddressRegistryVerifyProofOfOwnershipRequest; +import com.fireblocks.sdk.model.AddressRegistryVerifyProofOfOwnershipResponse; import com.fireblocks.sdk.model.AmlVerdictManualRequest; import com.fireblocks.sdk.model.AmlVerdictManualResponse; import com.fireblocks.sdk.model.ArsConfigResponse; @@ -503,6 +507,117 @@ private HttpRequest.Builder assignVaultsToLegalEntityRequestBuilder( } return localVarRequestBuilder; } + /** + * Create a Proof of Ownership PDF for an address Creates a Proof of Ownership PDF for a + * blockchain address owned by the authenticated workspace — for example, to share with a + * counterparty or bank as compliance evidence. Recipients can confirm it with `POST + * /v1/address_registry/proof_of_ownership_exports/verify`. Check + * `proofOfOwnershipAvailable` on `GET + * /v1/address_registry/legal_entities/{address}` first if you want to know whether create + * is likely to succeed. + * + * @param addressRegistryCreateProofOfOwnershipRequest (required) + * @param idempotencyKey A unique identifier for the request. If the request is sent multiple + * times with the same idempotency key, the server will return the same response as the + * first request. The idempotency key is valid for 24 hours. (optional) + * @return + * CompletableFuture<ApiResponse<AddressRegistryCreateProofOfOwnershipResponse>>, + * which completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> + createAddressRegistryProofOfOwnership( + AddressRegistryCreateProofOfOwnershipRequest + addressRegistryCreateProofOfOwnershipRequest, + String idempotencyKey) { + try { + HttpRequest.Builder localVarRequestBuilder = + createAddressRegistryProofOfOwnershipRequestBuilder( + addressRegistryCreateProofOfOwnershipRequest, idempotencyKey); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "createAddressRegistryProofOfOwnership", + localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse< + AddressRegistryCreateProofOfOwnershipResponse>( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + AddressRegistryCreateProofOfOwnershipResponse>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder createAddressRegistryProofOfOwnershipRequestBuilder( + AddressRegistryCreateProofOfOwnershipRequest + addressRegistryCreateProofOfOwnershipRequest, + String idempotencyKey) + throws ApiException { + ValidationUtils.assertParamExists( + "createAddressRegistryProofOfOwnership", + "addressRegistryCreateProofOfOwnershipRequest", + addressRegistryCreateProofOfOwnershipRequest); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/address_registry/proof_of_ownership_exports"; + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + if (idempotencyKey != null) { + localVarRequestBuilder.header("Idempotency-Key", idempotencyKey.toString()); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = + memberVarObjectMapper.writeValueAsBytes( + addressRegistryCreateProofOfOwnershipRequest); + localVarRequestBuilder.method( + "POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * Create a counterparty group Creates a new counterparty group. **Endpoint Permissions:** * Admin, Non-Signing Admin. @@ -3590,4 +3705,112 @@ private HttpRequest.Builder updateTravelRuleConfigRequestBuilder(String idempote } return localVarRequestBuilder; } + /** + * Verify a Proof of Ownership export Verifies a Proof of Ownership export against the record + * Fireblocks stored at creation. Returns `valid: false` (not 404) for an unknown, + * expired, or mismatched export. Available to any authenticated Fireblocks workspace, not just + * the export's original owner. + * + * @param addressRegistryVerifyProofOfOwnershipRequest (required) + * @param idempotencyKey A unique identifier for the request. If the request is sent multiple + * times with the same idempotency key, the server will return the same response as the + * first request. The idempotency key is valid for 24 hours. (optional) + * @return + * CompletableFuture<ApiResponse<AddressRegistryVerifyProofOfOwnershipResponse>>, + * which completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> + verifyAddressRegistryProofOfOwnership( + AddressRegistryVerifyProofOfOwnershipRequest + addressRegistryVerifyProofOfOwnershipRequest, + String idempotencyKey) { + try { + HttpRequest.Builder localVarRequestBuilder = + verifyAddressRegistryProofOfOwnershipRequestBuilder( + addressRegistryVerifyProofOfOwnershipRequest, idempotencyKey); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "verifyAddressRegistryProofOfOwnership", + localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse< + AddressRegistryVerifyProofOfOwnershipResponse>( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + AddressRegistryVerifyProofOfOwnershipResponse>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder verifyAddressRegistryProofOfOwnershipRequestBuilder( + AddressRegistryVerifyProofOfOwnershipRequest + addressRegistryVerifyProofOfOwnershipRequest, + String idempotencyKey) + throws ApiException { + ValidationUtils.assertParamExists( + "verifyAddressRegistryProofOfOwnership", + "addressRegistryVerifyProofOfOwnershipRequest", + addressRegistryVerifyProofOfOwnershipRequest); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/address_registry/proof_of_ownership_exports/verify"; + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + if (idempotencyKey != null) { + localVarRequestBuilder.header("Idempotency-Key", idempotencyKey.toString()); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = + memberVarObjectMapper.writeValueAsBytes( + addressRegistryVerifyProofOfOwnershipRequest); + localVarRequestBuilder.method( + "POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } } diff --git a/src/main/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApi.java b/src/main/java/com/fireblocks/sdk/api/ConnectedAccountsApi.java similarity index 97% rename from src/main/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApi.java rename to src/main/java/com/fireblocks/sdk/api/ConnectedAccountsApi.java index e40fd89e..3c708f11 100644 --- a/src/main/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApi.java +++ b/src/main/java/com/fireblocks/sdk/api/ConnectedAccountsApi.java @@ -54,7 +54,7 @@ @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.14.0") -public class ConnectedAccountsBetaApi { +public class ConnectedAccountsApi { private final HttpClient memberVarHttpClient; private final ObjectMapper memberVarObjectMapper; private final String memberVarBaseUri; @@ -63,11 +63,11 @@ public class ConnectedAccountsBetaApi { private final Consumer> memberVarResponseInterceptor; private final Consumer> memberVarAsyncResponseInterceptor; - public ConnectedAccountsBetaApi() { + public ConnectedAccountsApi() { this(new ApiClient()); } - public ConnectedAccountsBetaApi(ApiClient apiClient) { + public ConnectedAccountsApi(ApiClient apiClient) { memberVarHttpClient = apiClient.getHttpClient(); memberVarObjectMapper = apiClient.getObjectMapper(); memberVarBaseUri = apiClient.getBaseUri(); @@ -118,8 +118,7 @@ private String formatExceptionMessage(String operationId, int statusCode, String * `creds` field must be a Base64-encoded RSA-encrypted credential blob. Use `GET * /connected_accounts/credentials/public_key` to retrieve the public key for encryption. * The `providerType` is derived server-side from the `providerId` — callers - * do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. **Note:** This - * endpoint is currently in beta and might be subject to changes. + * do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. * * @param addConnectedAccountRequest (required) * @param idempotencyKey A unique identifier for the request. If the request is sent multiple @@ -211,8 +210,7 @@ private HttpRequest.Builder addConnectedAccountRequestBuilder( return localVarRequestBuilder; } /** - * Disconnect connected account Disconnect a connected account by ID. **Note**: - This endpoint - * is currently in beta and might be subject to changes. + * Disconnect connected account Disconnect a connected account by ID. * * @param accountId The ID of the account to disconnect. (required) * @return CompletableFuture<ApiResponse<Void>>, which completes exceptionally with @@ -279,7 +277,6 @@ private HttpRequest.Builder disconnectConnectedAccountRequestBuilder(String acco } /** * Get connected account Retrieve detailed information about a specific connected account by ID. - * **Note:** This endpoint is currently in beta and might be subject to changes. * * @param accountId The ID of the account to fetch. (required) * @return CompletableFuture<ApiResponse<ConnectedSingleAccountResponse>>, which @@ -358,8 +355,7 @@ private HttpRequest.Builder getConnectedAccountRequestBuilder(String accountId) } /** * Get allowlist for connected account Retrieves the address allowlist for a specified connected - * account. **Note:** This endpoint is currently in beta and might be subject to changes. - * Currently supports CoinbaseExchange/Binance accounts only. + * account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. * * @param accountId The connected account identifier (required) * @param status Filter by allowlist entry status (optional) @@ -500,8 +496,7 @@ private HttpRequest.Builder getConnectedAccountAllowlistRequestBuilder( } /** * Get a single allowlist entry for a connected account Retrieves a single allowlist entry by - * its Fireblocks identifier for a specified connected account. **Note:** This endpoint is - * currently in beta and might be subject to changes. Currently supports + * its Fireblocks identifier for a specified connected account. **Note:** Currently supports * CoinbaseExchange/Binance accounts only. * * @param accountId The connected account identifier (required) @@ -587,8 +582,7 @@ private HttpRequest.Builder getConnectedAccountAllowlistEntryRequestBuilder( } /** * Get balances for an account Retrieve current asset balances for a specific connected account - * as a flat list (one row per `assetId`, `balanceType`). **Note:** This - * endpoint is currently in beta and might be subject to changes. + * as a flat list (one row per `assetId`, `balanceType`). * * @param accountId The ID of the account to fetch balances for. (required) * @param pageSize Page size for pagination. (optional) @@ -689,8 +683,7 @@ private HttpRequest.Builder getConnectedAccountBalancesRequestBuilder( } /** * Get exchange rates for an account Retrieve current exchange rates for converting between - * specific assets in a connected account. **Note:** This endpoint is currently in beta and - * might be subject to changes. + * specific assets in a connected account. * * @param accountId The ID of the account to fetch rates for. (required) * @param baseAssetId The ID of the asset to fetch rates for. (required) @@ -795,8 +788,7 @@ private HttpRequest.Builder getConnectedAccountRatesRequestBuilder( /** * Get supported trading pairs for an account Retrieve all asset trading pairs supported by a * specific connected account, including the pair type (`quote`, `market`, - * `onOffRamp`). **Note:** This endpoint is currently in beta and might be subject to - * changes. + * `onOffRamp`). * * @param accountId The ID of the account to fetch supported pairs for. (required) * @param pageSize Page size for pagination. (optional, default to 100) @@ -897,8 +889,7 @@ private HttpRequest.Builder getConnectedAccountTradingPairsRequestBuilder( return localVarRequestBuilder; } /** - * Get connected accounts Returns all connected accounts. **Note:** This endpoint is currently - * in beta and might be subject to changes. + * Get connected accounts Returns all connected accounts. * * @param mainAccounts Whether to include only main accounts in the response. (optional, default * to false) @@ -999,8 +990,7 @@ private HttpRequest.Builder getConnectedAccountsRequestBuilder( * Get public key to encrypt connected account credentials Returns the RSA public key used to * encrypt the `creds` field before calling `POST /connected_accounts`. The * key is a singleton resource scoped to the connected-accounts credentials domain — there is - * one per tenant context. **Note:** This endpoint is currently in beta and might be subject to - * changes. + * one per tenant context. * * @return * CompletableFuture<ApiResponse<GetConnectedAccountsCredentialsPublicKeyResponse>>, @@ -1078,8 +1068,7 @@ private HttpRequest.Builder getConnectedAccountsCredentialsPublicKeyRequestBuild return localVarRequestBuilder; } /** - * Rename Connected Account Rename a connected account by account ID. **Note:** This endpoint is - * currently in beta and might be subject to changes. + * Rename Connected Account Rename a connected account by account ID. * * @param renameConnectedAccountRequest (required) * @param accountId The unique identifier of the connected account (required) @@ -1185,8 +1174,7 @@ private HttpRequest.Builder renameConnectedAccountRequestBuilder( /** * Sync allowlist for connected account Triggers an on-demand sync from the exchange, bypassing * the cache and fetching live data immediately. **Rate limit:** 1 request per minute per - * connected account. **Note:** This endpoint is currently in beta and might be subject to - * changes. Currently supports CoinbaseExchange/Binance accounts only. + * connected account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. * * @param accountId The connected account identifier (required) * @param idempotencyKey A unique identifier for the request. If the request is sent multiple @@ -1268,8 +1256,7 @@ private HttpRequest.Builder syncConnectedAccountAllowlistRequestBuilder( * mandatory. Validation against the exchange is synchronous, but the update itself is **pending * mobile approval** — the existing credentials stay live until the change is approved, so none * of the affected accounts are disconnected in the meantime. Endpoint Permission: Admin, - * Non-Signing Admin. **Note:** This endpoint is currently in beta and might be subject to - * changes. + * Non-Signing Admin. * * @param updateConnectedAccountCredentialsRequest (required) * @param accountId The unique identifier of the connected account whose API key credentials are diff --git a/src/main/java/com/fireblocks/sdk/api/ConsoleUserApi.java b/src/main/java/com/fireblocks/sdk/api/ConsoleUserApi.java index 45e0918d..9f96237e 100644 --- a/src/main/java/com/fireblocks/sdk/api/ConsoleUserApi.java +++ b/src/main/java/com/fireblocks/sdk/api/ConsoleUserApi.java @@ -18,6 +18,9 @@ import com.fireblocks.sdk.ApiClient; import com.fireblocks.sdk.ApiException; import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.Pair; +import com.fireblocks.sdk.ValidationUtils; +import com.fireblocks.sdk.model.ConsoleUser; import com.fireblocks.sdk.model.CreateConsoleUser; import com.fireblocks.sdk.model.GetConsoleUsersResponse; import java.io.IOException; @@ -27,6 +30,9 @@ import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.StringJoiner; import java.util.concurrent.CancellationException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; @@ -173,6 +179,104 @@ private HttpRequest.Builder createConsoleUserRequestBuilder( } return localVarRequestBuilder; } + /** + * Request deletion of a console user Requests deletion of a console user. The request is + * asynchronous: it goes through the workspace's configured \"Delete users\" + * approval policy (Settings > Quorums), exactly as deleting a user from the console does, + * and the user is removed only once that approval completes. - Track progress by polling GET + * /management/users; deletion is complete when the user is disabled. - Please note that this + * endpoint is available only for API keys with Admin/Non Signing Admin permissions. Endpoint + * Permission: Admin, Non-Signing Admin. **Note:** This endpoint is currently in beta and might + * be subject to changes. + * + * @param id The ID of the console user to delete (required) + * @param force Acknowledges the impact of removing this user and proceeds anyway. Overrides + * both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way the acknowledgement + * checkbox does in the console. (optional, default to false) + * @return CompletableFuture<ApiResponse<ConsoleUser>>, which completes + * exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> deleteConsoleUser(String id, Boolean force) { + try { + HttpRequest.Builder localVarRequestBuilder = deleteConsoleUserRequestBuilder(id, force); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException("deleteConsoleUser", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + ConsoleUser>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .>failedFuture( + toApiFailure(localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder deleteConsoleUserRequestBuilder(String id, Boolean force) + throws ApiException { + ValidationUtils.assertParamExistsAndNotEmpty("deleteConsoleUser", "id", id); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/management/users/{id}".replace("{id}", ApiClient.urlEncode(id.toString())); + + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "force"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("force", force)); + + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri( + URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * Get console users Get console users for your workspace. - Please note that this endpoint is * available only for API keys with Admin/Non Signing Admin permissions. Endpoint Permission: diff --git a/src/main/java/com/fireblocks/sdk/api/UtxoManagementBetaApi.java b/src/main/java/com/fireblocks/sdk/api/UtxoManagementBetaApi.java index a9d11531..5eb6e27b 100644 --- a/src/main/java/com/fireblocks/sdk/api/UtxoManagementBetaApi.java +++ b/src/main/java/com/fireblocks/sdk/api/UtxoManagementBetaApi.java @@ -23,6 +23,8 @@ import com.fireblocks.sdk.model.AttachDetachUtxoLabelsRequest; import com.fireblocks.sdk.model.AttachDetachUtxoLabelsResponse; import com.fireblocks.sdk.model.ListUtxosResponse; +import com.fireblocks.sdk.model.UpsertUtxoSelectionConfigRequest; +import com.fireblocks.sdk.model.UtxoSelectionConfigResponse; import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -102,6 +104,82 @@ private String formatExceptionMessage(String operationId, int statusCode, String return operationId + " call failed with: " + statusCode + " - " + body; } + /** + * Get UTXO selection config Returns the workspace-level configured selection strategy and the + * effective strategy after runtime resolution. `ADAPTIVE` is the recommended + * strategy. When no row is stored (source `DEFAULT`), `effective` is + * `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise + * `ASC`. **Note:** These endpoints are currently in beta and might be subject to + * changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + * + * @return CompletableFuture<ApiResponse<UtxoSelectionConfigResponse>>, which + * completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> getUtxoSelectionConfig() { + try { + HttpRequest.Builder localVarRequestBuilder = getUtxoSelectionConfigRequestBuilder(); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "getUtxoSelectionConfig", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + UtxoSelectionConfigResponse>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder getUtxoSelectionConfigRequestBuilder() throws ApiException { + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/utxo_management/selection_config"; + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * List unspent outputs (UTXOs) Returns a paginated list of unspent transaction outputs (UTXOs) * for a UTXO-based asset in a vault account, with optional filters for labels, statuses, @@ -286,13 +364,111 @@ private HttpRequest.Builder getUtxosRequestBuilder( } return localVarRequestBuilder; } + /** + * Get vault and asset UTXO selection config Returns the config stored at this vault-and-asset + * scope, if any, and the effective strategy after workspace fallback and runtime resolution. + * `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and + * none is inherited from the workspace (source `DEFAULT`), `effective` is + * `ADAPTIVE` if adaptive selection is serving for this scope, otherwise + * `ASC`. **Note:** These endpoints are currently in beta and might be subject to + * changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + * + * @param vaultAccountId The ID of the vault account. (required) + * @param assetId The ID of the asset (required) + * @return CompletableFuture<ApiResponse<UtxoSelectionConfigResponse>>, which + * completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> + getVaultAssetUtxoSelectionConfig(String vaultAccountId, String assetId) { + try { + HttpRequest.Builder localVarRequestBuilder = + getVaultAssetUtxoSelectionConfigRequestBuilder(vaultAccountId, assetId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "getVaultAssetUtxoSelectionConfig", + localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + UtxoSelectionConfigResponse>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder getVaultAssetUtxoSelectionConfigRequestBuilder( + String vaultAccountId, String assetId) throws ApiException { + ValidationUtils.assertParamExistsAndNotEmpty( + "getVaultAssetUtxoSelectionConfig", "vaultAccountId", vaultAccountId); + ValidationUtils.assertParamExistsAndNotEmpty( + "getVaultAssetUtxoSelectionConfig", "assetId", assetId); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/utxo_management/{vaultAccountId}/{assetId}/selection_config" + .replace("{vaultAccountId}", ApiClient.urlEncode(vaultAccountId.toString())) + .replace("{assetId}", ApiClient.urlEncode(assetId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * Attach or detach labels to/from UTXOs Attach or detach labels to/from UTXOs in a vault * account. Labels can be used for organizing and filtering UTXOs. Labels are applied additively * — `labelsToAttach` adds to the existing label set and `labelsToDetach` - * removes from it. Neither operation replaces the full set. **Note:** These endpoints are - * currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing - * Admin, Signer, Approver, Editor. + * removes from it. Neither operation replaces the full set. The request is all-or-nothing: if + * any identifier cannot be labelled, no UTXO is labelled and the request fails with + * `400`. The response lists every failed identifier in `failures`, each + * with its own `reason` — use it, not the status, to decide what to do: - + * `NOT_FOUND` — not found in this vault and asset. - `NOT_LABELLABLE` — + * spent, or removed, and can no longer be labelled. A UTXO removed within the last hour is + * reported as `NOT_FOUND` with `utxoStatus: REMOVED`; if it does not + * reappear, it becomes `NOT_LABELLABLE` after about an hour. A `400` + * without `failures` means the request itself is malformed. **Note:** These endpoints + * are currently in beta and might be subject to changes. Endpoint Permission: Admin, + * Non-Signing Admin, Signer, Approver, Editor. * * @param attachDetachUtxoLabelsRequest (required) * @param vaultAccountId The ID of the vault account (required) @@ -397,4 +573,221 @@ private HttpRequest.Builder updateUtxoLabelsRequestBuilder( } return localVarRequestBuilder; } + /** + * Upsert UTXO selection config Creates or updates the workspace-level UTXO selection strategy. + * `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and + * might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + * + * @param upsertUtxoSelectionConfigRequest (required) + * @param idempotencyKey A unique identifier for the request. If the request is sent multiple + * times with the same idempotency key, the server will return the same response as the + * first request. The idempotency key is valid for 24 hours. (optional) + * @return CompletableFuture<ApiResponse<UtxoSelectionConfigResponse>>, which + * completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> upsertUtxoSelectionConfig( + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest, + String idempotencyKey) { + try { + HttpRequest.Builder localVarRequestBuilder = + upsertUtxoSelectionConfigRequestBuilder( + upsertUtxoSelectionConfigRequest, idempotencyKey); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "upsertUtxoSelectionConfig", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + UtxoSelectionConfigResponse>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder upsertUtxoSelectionConfigRequestBuilder( + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest, + String idempotencyKey) + throws ApiException { + ValidationUtils.assertParamExists( + "upsertUtxoSelectionConfig", + "upsertUtxoSelectionConfigRequest", + upsertUtxoSelectionConfigRequest); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/utxo_management/selection_config"; + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + if (idempotencyKey != null) { + localVarRequestBuilder.header("Idempotency-Key", idempotencyKey.toString()); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = + memberVarObjectMapper.writeValueAsBytes(upsertUtxoSelectionConfigRequest); + localVarRequestBuilder.method( + "PUT", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * Upsert vault and asset UTXO selection config Creates or updates the UTXO selection strategy + * for this vault account and asset. `ADAPTIVE` is recommended. **Note:** These + * endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, + * Non-Signing Admin. + * + * @param upsertUtxoSelectionConfigRequest (required) + * @param vaultAccountId The ID of the vault account. (required) + * @param assetId The ID of the asset (required) + * @param idempotencyKey A unique identifier for the request. If the request is sent multiple + * times with the same idempotency key, the server will return the same response as the + * first request. The idempotency key is valid for 24 hours. (optional) + * @return CompletableFuture<ApiResponse<UtxoSelectionConfigResponse>>, which + * completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> + upsertVaultAssetUtxoSelectionConfig( + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest, + String vaultAccountId, + String assetId, + String idempotencyKey) { + try { + HttpRequest.Builder localVarRequestBuilder = + upsertVaultAssetUtxoSelectionConfigRequestBuilder( + upsertUtxoSelectionConfigRequest, + vaultAccountId, + assetId, + idempotencyKey); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "upsertVaultAssetUtxoSelectionConfig", + localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + UtxoSelectionConfigResponse>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder upsertVaultAssetUtxoSelectionConfigRequestBuilder( + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest, + String vaultAccountId, + String assetId, + String idempotencyKey) + throws ApiException { + ValidationUtils.assertParamExists( + "upsertVaultAssetUtxoSelectionConfig", + "upsertUtxoSelectionConfigRequest", + upsertUtxoSelectionConfigRequest); + ValidationUtils.assertParamExistsAndNotEmpty( + "upsertVaultAssetUtxoSelectionConfig", "vaultAccountId", vaultAccountId); + ValidationUtils.assertParamExistsAndNotEmpty( + "upsertVaultAssetUtxoSelectionConfig", "assetId", assetId); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/utxo_management/{vaultAccountId}/{assetId}/selection_config" + .replace("{vaultAccountId}", ApiClient.urlEncode(vaultAccountId.toString())) + .replace("{assetId}", ApiClient.urlEncode(assetId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + if (idempotencyKey != null) { + localVarRequestBuilder.header("Idempotency-Key", idempotencyKey.toString()); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = + memberVarObjectMapper.writeValueAsBytes(upsertUtxoSelectionConfigRequest); + localVarRequestBuilder.method( + "PUT", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } } diff --git a/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java b/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java index dadbdfc6..b824ed16 100644 --- a/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java +++ b/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java @@ -20,8 +20,10 @@ import com.fireblocks.sdk.ApiResponse; import com.fireblocks.sdk.Pair; import com.fireblocks.sdk.ValidationUtils; +import com.fireblocks.sdk.model.CreateWebhookMtlsConfigRequest; import com.fireblocks.sdk.model.CreateWebhookOauthRequest; import com.fireblocks.sdk.model.CreateWebhookRequest; +import com.fireblocks.sdk.model.DeleteWebhookMtlsConfigResponse; import com.fireblocks.sdk.model.DeleteWebhookOauthResponse; import com.fireblocks.sdk.model.NotificationAttemptsPaginatedResponse; import com.fireblocks.sdk.model.NotificationPaginatedResponse; @@ -33,11 +35,13 @@ import com.fireblocks.sdk.model.ResendFailedNotificationsRequest; import com.fireblocks.sdk.model.ResendFailedNotificationsResponse; import com.fireblocks.sdk.model.ResendNotificationsByResourceIdRequest; +import com.fireblocks.sdk.model.UpdateWebhookMtlsConfigRequest; import com.fireblocks.sdk.model.UpdateWebhookOauthRequest; import com.fireblocks.sdk.model.UpdateWebhookRequest; import com.fireblocks.sdk.model.Webhook; import com.fireblocks.sdk.model.WebhookEvent; import com.fireblocks.sdk.model.WebhookMetric; +import com.fireblocks.sdk.model.WebhookMtlsConfig; import com.fireblocks.sdk.model.WebhookMtlsCsrResponse; import com.fireblocks.sdk.model.WebhookOauthCredentials; import com.fireblocks.sdk.model.WebhookPaginatedResponse; @@ -208,6 +212,106 @@ private HttpRequest.Builder createWebhookRequestBuilder( } return localVarRequestBuilder; } + /** + * Create an mTLS configuration Stores a certificate signed against the CSR from `GET + * /v1/webhooks_settings/mtls_csr` and returns its id, which is then set as + * `webhookMtlsId` on a webhook or on OAuth credentials. The private key the + * certificate was issued for is derived from the certificate, so it is never named by the + * caller. Re-uploading a certificate already stored returns the existing id rather than + * creating a second configuration, so several webhooks and OAuth credentials can share one + * certificate. A certificate that was not issued for a private key this workspace holds is + * rejected with a `400`. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + * + * @param createWebhookMtlsConfigRequest (required) + * @param idempotencyKey A unique identifier for the request. If the request is sent multiple + * times with the same idempotency key, the server will return the same response as the + * first request. The idempotency key is valid for 24 hours. (optional) + * @return CompletableFuture<ApiResponse<WebhookMtlsConfig>>, which completes + * exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> createWebhookMtlsConfig( + CreateWebhookMtlsConfigRequest createWebhookMtlsConfigRequest, String idempotencyKey) { + try { + HttpRequest.Builder localVarRequestBuilder = + createWebhookMtlsConfigRequestBuilder( + createWebhookMtlsConfigRequest, idempotencyKey); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "createWebhookMtlsConfig", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + WebhookMtlsConfig>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .>failedFuture( + toApiFailure(localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder createWebhookMtlsConfigRequestBuilder( + CreateWebhookMtlsConfigRequest createWebhookMtlsConfigRequest, String idempotencyKey) + throws ApiException { + ValidationUtils.assertParamExists( + "createWebhookMtlsConfig", + "createWebhookMtlsConfigRequest", + createWebhookMtlsConfigRequest); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/webhooks_settings/mtls"; + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + if (idempotencyKey != null) { + localVarRequestBuilder.header("Idempotency-Key", idempotencyKey.toString()); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = + memberVarObjectMapper.writeValueAsBytes(createWebhookMtlsConfigRequest); + localVarRequestBuilder.method( + "POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * Create OAuth credentials Creates a reusable OAuth client credential set. Attach it to a * webhook by passing the returned id as that webhook's `webhookOauthId`. Several @@ -377,6 +481,118 @@ private HttpRequest.Builder deleteWebhookRequestBuilder(UUID webhookId) throws A } return localVarRequestBuilder; } + /** + * Delete an mTLS configuration Deletes an mTLS configuration. By default the delete is refused + * while the configuration is still in use: if any webhook or OAuth credentials reference it, + * nothing is deleted and the request fails with `409 Conflict`, naming the reason and + * listing the ids of what references it. This protects a shared configuration from being + * removed out from under the webhooks and token requests that depend on it. Pass + * `forceDelete=true` to delete anyway. That detaches everything referencing it — + * it clears `webhookMtlsId` on each webhook and OAuth credentials, it does **not** + * delete them — then deletes the configuration and returns the deleted resource together with + * `detachedWebhookIds` and `detachedWebhookOauthIds`. Detached webhooks + * keep delivering notifications, and detached OAuth credentials keep requesting tokens, but + * without a client certificate, so an endpoint that requires mTLS will reject them from that + * point on. When nothing references the configuration the delete succeeds either way, and both + * lists come back empty. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + * + * @param webhookMtlsId The unique identifier of the mTLS configuration (required) + * @param forceDelete Delete the configuration even while webhooks or OAuth credentials still + * reference it, detaching them instead of refusing; their ids are returned in + * `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave it unset, + * or `false`, to get a `409 Conflict` whenever anything still + * references the configuration. (optional, default to false) + * @return CompletableFuture<ApiResponse<DeleteWebhookMtlsConfigResponse>>, which + * completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> deleteWebhookMtlsConfig( + UUID webhookMtlsId, Boolean forceDelete) { + try { + HttpRequest.Builder localVarRequestBuilder = + deleteWebhookMtlsConfigRequestBuilder(webhookMtlsId, forceDelete); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "deleteWebhookMtlsConfig", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + DeleteWebhookMtlsConfigResponse>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder deleteWebhookMtlsConfigRequestBuilder( + UUID webhookMtlsId, Boolean forceDelete) throws ApiException { + ValidationUtils.assertParamExistsAndNotEmpty( + "deleteWebhookMtlsConfig", "webhookMtlsId", webhookMtlsId.toString()); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/webhooks_settings/mtls/{webhookMtlsId}" + .replace("{webhookMtlsId}", ApiClient.urlEncode(webhookMtlsId.toString())); + + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "forceDelete"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("forceDelete", forceDelete)); + + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri( + URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * Delete OAuth credentials Deletes an OAuth credential set. By default the delete is refused * while the credentials are still in use: if any webhook references them, nothing is deleted @@ -1264,6 +1480,178 @@ private HttpRequest.Builder getWebhookRequestBuilder(UUID webhookId) throws ApiE } return localVarRequestBuilder; } + /** + * Get an mTLS configuration by id Retrieve one stored mTLS configuration by its id. + * + * @param webhookMtlsId The unique identifier of the mTLS configuration (required) + * @return CompletableFuture<ApiResponse<WebhookMtlsConfig>>, which completes + * exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> getWebhookMtlsConfig( + UUID webhookMtlsId) { + try { + HttpRequest.Builder localVarRequestBuilder = + getWebhookMtlsConfigRequestBuilder(webhookMtlsId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "getWebhookMtlsConfig", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + WebhookMtlsConfig>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .>failedFuture( + toApiFailure(localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder getWebhookMtlsConfigRequestBuilder(UUID webhookMtlsId) + throws ApiException { + ValidationUtils.assertParamExistsAndNotEmpty( + "getWebhookMtlsConfig", "webhookMtlsId", webhookMtlsId.toString()); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/webhooks_settings/mtls/{webhookMtlsId}" + .replace("{webhookMtlsId}", ApiClient.urlEncode(webhookMtlsId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** + * List the uploaded mTLS configurations Lists the workspace's mTLS configurations, newest + * first. Pass `ids` to ask about particular ones instead — useful for resolving the + * `webhookMtlsId` values on a set of webhooks in one call. + * + * @param ids Return only the configurations with these ids, instead of all of them. Repeat the + * parameter for each id. An id belonging to another workspace, or to nothing, is left out + * of the response rather than failing the request. (optional + * @return CompletableFuture<ApiResponse<List<WebhookMtlsConfig>>>, which + * completes exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture>> getWebhookMtlsConfigs( + List ids) { + try { + HttpRequest.Builder localVarRequestBuilder = getWebhookMtlsConfigsRequestBuilder(ids); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "getWebhookMtlsConfigs", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse>( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + List< + WebhookMtlsConfig>>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .>> + failedFuture( + toApiFailure( + localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder getWebhookMtlsConfigsRequestBuilder(List ids) + throws ApiException { + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = "/webhooks_settings/mtls"; + + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "ids"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "ids", ids)); + + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri( + URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + + localVarRequestBuilder.header("Accept", "application/json"); + + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * Get OAuth credentials by id Retrieve an OAuth credential set by its id. The client secret is * never returned. @@ -1976,6 +2364,105 @@ private HttpRequest.Builder updateWebhookRequestBuilder( } return localVarRequestBuilder; } + /** + * Update an mTLS configuration Renames a configuration, replaces its certificate, or both. Only + * the fields present in the request are changed; anything omitted is left as it is, and a + * request with neither field is rejected with a `400`. Replacing + * `signedCert` switches every webhook and OAuth credentials set using this + * configuration over to the new certificate in one write, and the private key it was issued for + * is re-derived from the certificate. A replacement that was not issued for a private key this + * workspace holds is rejected with a `400`. Sending `name: null` removes + * the label. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + * + * @param updateWebhookMtlsConfigRequest (required) + * @param webhookMtlsId The unique identifier of the mTLS configuration (required) + * @return CompletableFuture<ApiResponse<WebhookMtlsConfig>>, which completes + * exceptionally with an {@link ApiException} if the API call fails + */ + public CompletableFuture> updateWebhookMtlsConfig( + UpdateWebhookMtlsConfigRequest updateWebhookMtlsConfigRequest, UUID webhookMtlsId) { + try { + HttpRequest.Builder localVarRequestBuilder = + updateWebhookMtlsConfigRequestBuilder( + updateWebhookMtlsConfigRequest, webhookMtlsId); + return memberVarHttpClient + .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()) + .thenComposeAsync( + localVarResponse -> { + if (memberVarAsyncResponseInterceptor != null) { + memberVarAsyncResponseInterceptor.accept(localVarResponse); + } + if (localVarResponse.statusCode() / 100 != 2) { + return CompletableFuture.failedFuture( + getApiException( + "updateWebhookMtlsConfig", localVarResponse)); + } + try { + String responseBody = localVarResponse.body(); + return CompletableFuture.completedFuture( + new ApiResponse( + localVarResponse.statusCode(), + localVarResponse.headers().map(), + responseBody == null || responseBody.isBlank() + ? null + : memberVarObjectMapper.readValue( + responseBody, + new TypeReference< + WebhookMtlsConfig>() {}))); + } catch (IOException e) { + return CompletableFuture.failedFuture(new ApiException(e)); + } + }) + .handle( + (localVarApiResponse, localVarThrowable) -> + localVarThrowable == null + ? CompletableFuture.completedFuture(localVarApiResponse) + : CompletableFuture + .>failedFuture( + toApiFailure(localVarThrowable))) + .thenCompose(localVarNormalized -> localVarNormalized); + } catch (ApiException e) { + return CompletableFuture.failedFuture(e); + } + } + + private HttpRequest.Builder updateWebhookMtlsConfigRequestBuilder( + UpdateWebhookMtlsConfigRequest updateWebhookMtlsConfigRequest, UUID webhookMtlsId) + throws ApiException { + ValidationUtils.assertParamExists( + "updateWebhookMtlsConfig", + "updateWebhookMtlsConfigRequest", + updateWebhookMtlsConfigRequest); + ValidationUtils.assertParamExistsAndNotEmpty( + "updateWebhookMtlsConfig", "webhookMtlsId", webhookMtlsId.toString()); + + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + + String localVarPath = + "/webhooks_settings/mtls/{webhookMtlsId}" + .replace("{webhookMtlsId}", ApiClient.urlEncode(webhookMtlsId.toString())); + + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + + try { + byte[] localVarPostBody = + memberVarObjectMapper.writeValueAsBytes(updateWebhookMtlsConfigRequest); + localVarRequestBuilder.method( + "PATCH", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } /** * Update OAuth credentials Updates only the fields present in the request; anything omitted is * left as it is. Sending `clientSecret` on its own rotates the secret for every @@ -1987,7 +2474,7 @@ private HttpRequest.Builder updateWebhookRequestBuilder( * quick way to empty it without naming every key. There is no ambiguity between the two uses of * `null` — one names an entry to delete, the other names the field. A claim cannot be * set to JSON `null`, though, on this endpoint or on create, because `null` - * is spent on deletion. `mtlsClientSignedCert` is a scalar rather than a map, so + * is spent on deletion. `webhookMtlsId` is a scalar rather than a map, so * `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing * Admin. * diff --git a/src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequest.java b/src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequest.java new file mode 100644 index 00000000..3cf88c00 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequest.java @@ -0,0 +1,150 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** Request body for creating an Address Registry Proof of Ownership PDF export. */ +@JsonPropertyOrder({AddressRegistryCreateProofOfOwnershipRequest.JSON_PROPERTY_ADDRESS}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class AddressRegistryCreateProofOfOwnershipRequest { + public static final String JSON_PROPERTY_ADDRESS = "address"; + @jakarta.annotation.Nonnull private String address; + + public AddressRegistryCreateProofOfOwnershipRequest() {} + + @JsonCreator + public AddressRegistryCreateProofOfOwnershipRequest( + @JsonProperty(value = JSON_PROPERTY_ADDRESS, required = true) String address) { + this.address = address; + } + + public AddressRegistryCreateProofOfOwnershipRequest address( + @jakarta.annotation.Nonnull String address) { + this.address = address; + return this; + } + + /** + * Blockchain address to prove ownership for (must resolve to the caller's workspace). Same + * format expectations as the `address` path parameter on `GET + * /v1/address_registry/legal_entities/{address}`. + * + * @return address + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_ADDRESS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getAddress() { + return address; + } + + @JsonProperty(JSON_PROPERTY_ADDRESS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAddress(@jakarta.annotation.Nonnull String address) { + this.address = address; + } + + /** Return true if this AddressRegistryCreateProofOfOwnershipRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AddressRegistryCreateProofOfOwnershipRequest addressRegistryCreateProofOfOwnershipRequest = + (AddressRegistryCreateProofOfOwnershipRequest) o; + return Objects.equals(this.address, addressRegistryCreateProofOfOwnershipRequest.address); + } + + @Override + public int hashCode() { + return Objects.hash(address); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AddressRegistryCreateProofOfOwnershipRequest {\n"); + sb.append(" address: ").append(toIndentedString(address)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `address` to the URL query string + if (getAddress() != null) { + joiner.add( + String.format( + "%saddress%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getAddress())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponse.java b/src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponse.java new file mode 100644 index 00000000..1d31bba5 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponse.java @@ -0,0 +1,285 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Arrays; +import java.util.Objects; +import java.util.StringJoiner; +import java.util.UUID; + +/** Address Registry Proof of Ownership PDF export, created successfully. */ +@JsonPropertyOrder({ + AddressRegistryCreateProofOfOwnershipResponse.JSON_PROPERTY_PDF, + AddressRegistryCreateProofOfOwnershipResponse.JSON_PROPERTY_EXPORT_ID, + AddressRegistryCreateProofOfOwnershipResponse.JSON_PROPERTY_VERIFICATION_HASH, + AddressRegistryCreateProofOfOwnershipResponse.JSON_PROPERTY_EXPIRES_AT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class AddressRegistryCreateProofOfOwnershipResponse { + public static final String JSON_PROPERTY_PDF = "pdf"; + @jakarta.annotation.Nonnull private byte[] pdf; + + public static final String JSON_PROPERTY_EXPORT_ID = "exportId"; + @jakarta.annotation.Nonnull private UUID exportId; + + public static final String JSON_PROPERTY_VERIFICATION_HASH = "verificationHash"; + @jakarta.annotation.Nonnull private String verificationHash; + + public static final String JSON_PROPERTY_EXPIRES_AT = "expiresAt"; + @jakarta.annotation.Nonnull private String expiresAt; + + public AddressRegistryCreateProofOfOwnershipResponse() {} + + @JsonCreator + public AddressRegistryCreateProofOfOwnershipResponse( + @JsonProperty(value = JSON_PROPERTY_PDF, required = true) byte[] pdf, + @JsonProperty(value = JSON_PROPERTY_EXPORT_ID, required = true) UUID exportId, + @JsonProperty(value = JSON_PROPERTY_VERIFICATION_HASH, required = true) + String verificationHash, + @JsonProperty(value = JSON_PROPERTY_EXPIRES_AT, required = true) String expiresAt) { + this.pdf = pdf; + this.exportId = exportId; + this.verificationHash = verificationHash; + this.expiresAt = expiresAt; + } + + public AddressRegistryCreateProofOfOwnershipResponse pdf( + @jakarta.annotation.Nonnull byte[] pdf) { + this.pdf = pdf; + return this; + } + + /** + * Base64-encoded Proof of Ownership PDF bytes. Fireblocks does not store the PDF: save it + * immediately, there is no re-download route. + * + * @return pdf + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_PDF) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public byte[] getPdf() { + return pdf; + } + + @JsonProperty(JSON_PROPERTY_PDF) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setPdf(@jakarta.annotation.Nonnull byte[] pdf) { + this.pdf = pdf; + } + + public AddressRegistryCreateProofOfOwnershipResponse exportId( + @jakarta.annotation.Nonnull UUID exportId) { + this.exportId = exportId; + return this; + } + + /** + * Stable id of the online-verifiable export record. + * + * @return exportId + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EXPORT_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UUID getExportId() { + return exportId; + } + + @JsonProperty(JSON_PROPERTY_EXPORT_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setExportId(@jakarta.annotation.Nonnull UUID exportId) { + this.exportId = exportId; + } + + public AddressRegistryCreateProofOfOwnershipResponse verificationHash( + @jakarta.annotation.Nonnull String verificationHash) { + this.verificationHash = verificationHash; + return this; + } + + /** + * Verification hash bound to the export (also printed on the PDF). + * + * @return verificationHash + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_VERIFICATION_HASH) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getVerificationHash() { + return verificationHash; + } + + @JsonProperty(JSON_PROPERTY_VERIFICATION_HASH) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setVerificationHash(@jakarta.annotation.Nonnull String verificationHash) { + this.verificationHash = verificationHash; + } + + public AddressRegistryCreateProofOfOwnershipResponse expiresAt( + @jakarta.annotation.Nonnull String expiresAt) { + this.expiresAt = expiresAt; + return this; + } + + /** + * Inclusive last UTC calendar day online verification is available (`YYYY-MM-DD`). + * + * @return expiresAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getExpiresAt() { + return expiresAt; + } + + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setExpiresAt(@jakarta.annotation.Nonnull String expiresAt) { + this.expiresAt = expiresAt; + } + + /** Return true if this AddressRegistryCreateProofOfOwnershipResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AddressRegistryCreateProofOfOwnershipResponse + addressRegistryCreateProofOfOwnershipResponse = + (AddressRegistryCreateProofOfOwnershipResponse) o; + return Arrays.equals(this.pdf, addressRegistryCreateProofOfOwnershipResponse.pdf) + && Objects.equals( + this.exportId, addressRegistryCreateProofOfOwnershipResponse.exportId) + && Objects.equals( + this.verificationHash, + addressRegistryCreateProofOfOwnershipResponse.verificationHash) + && Objects.equals( + this.expiresAt, addressRegistryCreateProofOfOwnershipResponse.expiresAt); + } + + @Override + public int hashCode() { + return Objects.hash(Arrays.hashCode(pdf), exportId, verificationHash, expiresAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AddressRegistryCreateProofOfOwnershipResponse {\n"); + sb.append(" pdf: ").append(toIndentedString(pdf)).append("\n"); + sb.append(" exportId: ").append(toIndentedString(exportId)).append("\n"); + sb.append(" verificationHash: ").append(toIndentedString(verificationHash)).append("\n"); + sb.append(" expiresAt: ").append(toIndentedString(expiresAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `pdf` to the URL query string + if (getPdf() != null) { + joiner.add( + String.format( + "%spdf%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getPdf())))); + } + + // add `exportId` to the URL query string + if (getExportId() != null) { + joiner.add( + String.format( + "%sexportId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExportId())))); + } + + // add `verificationHash` to the URL query string + if (getVerificationHash() != null) { + joiner.add( + String.format( + "%sverificationHash%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVerificationHash())))); + } + + // add `expiresAt` to the URL query string + if (getExpiresAt() != null) { + joiner.add( + String.format( + "%sexpiresAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExpiresAt())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/AddressRegistryLegalEntity.java b/src/main/java/com/fireblocks/sdk/model/AddressRegistryLegalEntity.java index 0aa11d71..8b99ac29 100644 --- a/src/main/java/com/fireblocks/sdk/model/AddressRegistryLegalEntity.java +++ b/src/main/java/com/fireblocks/sdk/model/AddressRegistryLegalEntity.java @@ -30,7 +30,8 @@ AddressRegistryLegalEntity.JSON_PROPERTY_JURISDICTION, AddressRegistryLegalEntity.JSON_PROPERTY_LEI, AddressRegistryLegalEntity.JSON_PROPERTY_TRAVEL_RULE_PROVIDERS, - AddressRegistryLegalEntity.JSON_PROPERTY_EMAIL + AddressRegistryLegalEntity.JSON_PROPERTY_EMAIL, + AddressRegistryLegalEntity.JSON_PROPERTY_PROOF_OF_OWNERSHIP_AVAILABLE }) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", @@ -49,11 +50,15 @@ public class AddressRegistryLegalEntity { @jakarta.annotation.Nonnull private String lei; public static final String JSON_PROPERTY_TRAVEL_RULE_PROVIDERS = "travelRuleProviders"; - @jakarta.annotation.Nonnull private List travelRuleProviders; + @jakarta.annotation.Nonnull private List travelRuleProviders; public static final String JSON_PROPERTY_EMAIL = "email"; @jakarta.annotation.Nonnull private String email; + public static final String JSON_PROPERTY_PROOF_OF_OWNERSHIP_AVAILABLE = + "proofOfOwnershipAvailable"; + @jakarta.annotation.Nonnull private Boolean proofOfOwnershipAvailable; + public AddressRegistryLegalEntity() {} @JsonCreator @@ -63,14 +68,17 @@ public AddressRegistryLegalEntity( @JsonProperty(value = JSON_PROPERTY_JURISDICTION, required = true) String jurisdiction, @JsonProperty(value = JSON_PROPERTY_LEI, required = true) String lei, @JsonProperty(value = JSON_PROPERTY_TRAVEL_RULE_PROVIDERS, required = true) - List travelRuleProviders, - @JsonProperty(value = JSON_PROPERTY_EMAIL, required = true) String email) { + List travelRuleProviders, + @JsonProperty(value = JSON_PROPERTY_EMAIL, required = true) String email, + @JsonProperty(value = JSON_PROPERTY_PROOF_OF_OWNERSHIP_AVAILABLE, required = true) + Boolean proofOfOwnershipAvailable) { this.leiData = leiData; this.entityName = entityName; this.jurisdiction = jurisdiction; this.lei = lei; this.travelRuleProviders = travelRuleProviders; this.email = email; + this.proofOfOwnershipAvailable = proofOfOwnershipAvailable; } public AddressRegistryLegalEntity leiData(@jakarta.annotation.Nonnull Boolean leiData) { @@ -168,14 +176,12 @@ public void setLei(@jakarta.annotation.Nonnull String lei) { } public AddressRegistryLegalEntity travelRuleProviders( - @jakarta.annotation.Nonnull - List travelRuleProviders) { + @jakarta.annotation.Nonnull List travelRuleProviders) { this.travelRuleProviders = travelRuleProviders; return this; } - public AddressRegistryLegalEntity addTravelRuleProvidersItem( - AddressRegistryTravelRuleProvider travelRuleProvidersItem) { + public AddressRegistryLegalEntity addTravelRuleProvidersItem(String travelRuleProvidersItem) { if (this.travelRuleProviders == null) { this.travelRuleProviders = new ArrayList<>(); } @@ -191,15 +197,14 @@ public AddressRegistryLegalEntity addTravelRuleProvidersItem( @jakarta.annotation.Nonnull @JsonProperty(JSON_PROPERTY_TRAVEL_RULE_PROVIDERS) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public List getTravelRuleProviders() { + public List getTravelRuleProviders() { return travelRuleProviders; } @JsonProperty(JSON_PROPERTY_TRAVEL_RULE_PROVIDERS) @JsonInclude(value = JsonInclude.Include.ALWAYS) public void setTravelRuleProviders( - @jakarta.annotation.Nonnull - List travelRuleProviders) { + @jakarta.annotation.Nonnull List travelRuleProviders) { this.travelRuleProviders = travelRuleProviders; } @@ -226,6 +231,32 @@ public void setEmail(@jakarta.annotation.Nonnull String email) { this.email = email; } + public AddressRegistryLegalEntity proofOfOwnershipAvailable( + @jakarta.annotation.Nonnull Boolean proofOfOwnershipAvailable) { + this.proofOfOwnershipAvailable = proofOfOwnershipAvailable; + return this; + } + + /** + * Whether the caller can currently create a Proof of Ownership PDF for this address (`POST + * /v1/address_registry/proof_of_ownership_exports`). + * + * @return proofOfOwnershipAvailable + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_PROOF_OF_OWNERSHIP_AVAILABLE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Boolean getProofOfOwnershipAvailable() { + return proofOfOwnershipAvailable; + } + + @JsonProperty(JSON_PROPERTY_PROOF_OF_OWNERSHIP_AVAILABLE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setProofOfOwnershipAvailable( + @jakarta.annotation.Nonnull Boolean proofOfOwnershipAvailable) { + this.proofOfOwnershipAvailable = proofOfOwnershipAvailable; + } + /** Return true if this AddressRegistryLegalEntity object is equal to o. */ @Override public boolean equals(Object o) { @@ -242,12 +273,22 @@ public boolean equals(Object o) { && Objects.equals(this.lei, addressRegistryLegalEntity.lei) && Objects.equals( this.travelRuleProviders, addressRegistryLegalEntity.travelRuleProviders) - && Objects.equals(this.email, addressRegistryLegalEntity.email); + && Objects.equals(this.email, addressRegistryLegalEntity.email) + && Objects.equals( + this.proofOfOwnershipAvailable, + addressRegistryLegalEntity.proofOfOwnershipAvailable); } @Override public int hashCode() { - return Objects.hash(leiData, entityName, jurisdiction, lei, travelRuleProviders, email); + return Objects.hash( + leiData, + entityName, + jurisdiction, + lei, + travelRuleProviders, + email, + proofOfOwnershipAvailable); } @Override @@ -262,6 +303,9 @@ public String toString() { .append(toIndentedString(travelRuleProviders)) .append("\n"); sb.append(" email: ").append(toIndentedString(email)).append("\n"); + sb.append(" proofOfOwnershipAvailable: ") + .append(toIndentedString(proofOfOwnershipAvailable)) + .append("\n"); sb.append("}"); return sb.toString(); } @@ -352,20 +396,17 @@ public String toUrlQueryString(String prefix) { // add `travelRuleProviders` to the URL query string if (getTravelRuleProviders() != null) { for (int i = 0; i < getTravelRuleProviders().size(); i++) { - if (getTravelRuleProviders().get(i) != null) { - joiner.add( - String.format( - "%stravelRuleProviders%s%s=%s", - prefix, - suffix, - "".equals(suffix) - ? "" - : String.format( - "%s%d%s", containerPrefix, i, containerSuffix), - ApiClient.urlEncode( - ApiClient.valueToString( - getTravelRuleProviders().get(i))))); - } + joiner.add( + String.format( + "%stravelRuleProviders%s%s=%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format( + "%s%d%s", containerPrefix, i, containerSuffix), + ApiClient.urlEncode( + ApiClient.valueToString(getTravelRuleProviders().get(i))))); } } @@ -379,6 +420,17 @@ public String toUrlQueryString(String prefix) { ApiClient.urlEncode(ApiClient.valueToString(getEmail())))); } + // add `proofOfOwnershipAvailable` to the URL query string + if (getProofOfOwnershipAvailable() != null) { + joiner.add( + String.format( + "%sproofOfOwnershipAvailable%s=%s", + prefix, + suffix, + ApiClient.urlEncode( + ApiClient.valueToString(getProofOfOwnershipAvailable())))); + } + return joiner.toString(); } } diff --git a/src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequest.java b/src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequest.java new file mode 100644 index 00000000..c5b80cdf --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequest.java @@ -0,0 +1,282 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; +import java.util.UUID; + +/** Request body for verifying an Address Registry Proof of Ownership export. */ +@JsonPropertyOrder({ + AddressRegistryVerifyProofOfOwnershipRequest.JSON_PROPERTY_EXPORT_ID, + AddressRegistryVerifyProofOfOwnershipRequest.JSON_PROPERTY_VERIFICATION_HASH, + AddressRegistryVerifyProofOfOwnershipRequest.JSON_PROPERTY_ADDRESS, + AddressRegistryVerifyProofOfOwnershipRequest.JSON_PROPERTY_EXPIRES_AT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class AddressRegistryVerifyProofOfOwnershipRequest { + public static final String JSON_PROPERTY_EXPORT_ID = "exportId"; + @jakarta.annotation.Nonnull private UUID exportId; + + public static final String JSON_PROPERTY_VERIFICATION_HASH = "verificationHash"; + @jakarta.annotation.Nonnull private String verificationHash; + + public static final String JSON_PROPERTY_ADDRESS = "address"; + @jakarta.annotation.Nonnull private String address; + + public static final String JSON_PROPERTY_EXPIRES_AT = "expiresAt"; + @jakarta.annotation.Nullable private String expiresAt; + + public AddressRegistryVerifyProofOfOwnershipRequest() {} + + @JsonCreator + public AddressRegistryVerifyProofOfOwnershipRequest( + @JsonProperty(value = JSON_PROPERTY_EXPORT_ID, required = true) UUID exportId, + @JsonProperty(value = JSON_PROPERTY_VERIFICATION_HASH, required = true) + String verificationHash, + @JsonProperty(value = JSON_PROPERTY_ADDRESS, required = true) String address) { + this.exportId = exportId; + this.verificationHash = verificationHash; + this.address = address; + } + + public AddressRegistryVerifyProofOfOwnershipRequest exportId( + @jakarta.annotation.Nonnull UUID exportId) { + this.exportId = exportId; + return this; + } + + /** + * Export id from create / the PDF. + * + * @return exportId + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EXPORT_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UUID getExportId() { + return exportId; + } + + @JsonProperty(JSON_PROPERTY_EXPORT_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setExportId(@jakarta.annotation.Nonnull UUID exportId) { + this.exportId = exportId; + } + + public AddressRegistryVerifyProofOfOwnershipRequest verificationHash( + @jakarta.annotation.Nonnull String verificationHash) { + this.verificationHash = verificationHash; + return this; + } + + /** + * Verification hash from create / the PDF (exact match required). + * + * @return verificationHash + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_VERIFICATION_HASH) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getVerificationHash() { + return verificationHash; + } + + @JsonProperty(JSON_PROPERTY_VERIFICATION_HASH) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setVerificationHash(@jakarta.annotation.Nonnull String verificationHash) { + this.verificationHash = verificationHash; + } + + public AddressRegistryVerifyProofOfOwnershipRequest address( + @jakarta.annotation.Nonnull String address) { + this.address = address; + return this; + } + + /** + * Address from the PDF (exact UTF-8 match to the stored export). + * + * @return address + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_ADDRESS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getAddress() { + return address; + } + + @JsonProperty(JSON_PROPERTY_ADDRESS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAddress(@jakarta.annotation.Nonnull String address) { + this.address = address; + } + + public AddressRegistryVerifyProofOfOwnershipRequest expiresAt( + @jakarta.annotation.Nullable String expiresAt) { + this.expiresAt = expiresAt; + return this; + } + + /** + * Optional but recommended: the PDF's \"Online verification available until\" + * date (`YYYY-MM-DD`), which speeds up the lookup. A wrong value yields `valid: + * false` even if the export exists — copy it exactly from the PDF, or omit it. + * + * @return expiresAt + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getExpiresAt() { + return expiresAt; + } + + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setExpiresAt(@jakarta.annotation.Nullable String expiresAt) { + this.expiresAt = expiresAt; + } + + /** Return true if this AddressRegistryVerifyProofOfOwnershipRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AddressRegistryVerifyProofOfOwnershipRequest addressRegistryVerifyProofOfOwnershipRequest = + (AddressRegistryVerifyProofOfOwnershipRequest) o; + return Objects.equals(this.exportId, addressRegistryVerifyProofOfOwnershipRequest.exportId) + && Objects.equals( + this.verificationHash, + addressRegistryVerifyProofOfOwnershipRequest.verificationHash) + && Objects.equals( + this.address, addressRegistryVerifyProofOfOwnershipRequest.address) + && Objects.equals( + this.expiresAt, addressRegistryVerifyProofOfOwnershipRequest.expiresAt); + } + + @Override + public int hashCode() { + return Objects.hash(exportId, verificationHash, address, expiresAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AddressRegistryVerifyProofOfOwnershipRequest {\n"); + sb.append(" exportId: ").append(toIndentedString(exportId)).append("\n"); + sb.append(" verificationHash: ").append(toIndentedString(verificationHash)).append("\n"); + sb.append(" address: ").append(toIndentedString(address)).append("\n"); + sb.append(" expiresAt: ").append(toIndentedString(expiresAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `exportId` to the URL query string + if (getExportId() != null) { + joiner.add( + String.format( + "%sexportId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExportId())))); + } + + // add `verificationHash` to the URL query string + if (getVerificationHash() != null) { + joiner.add( + String.format( + "%sverificationHash%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVerificationHash())))); + } + + // add `address` to the URL query string + if (getAddress() != null) { + joiner.add( + String.format( + "%saddress%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getAddress())))); + } + + // add `expiresAt` to the URL query string + if (getExpiresAt() != null) { + joiner.add( + String.format( + "%sexpiresAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExpiresAt())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponse.java b/src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponse.java new file mode 100644 index 00000000..c8af3d0d --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponse.java @@ -0,0 +1,199 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Online verification result. Authenticated calls always return HTTP 200 with this body + * (`valid: true` or `valid: false`); unknown/expired exports do not use 404. + */ +@JsonPropertyOrder({ + AddressRegistryVerifyProofOfOwnershipResponse.JSON_PROPERTY_VALID, + AddressRegistryVerifyProofOfOwnershipResponse.JSON_PROPERTY_EXPIRES_AT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class AddressRegistryVerifyProofOfOwnershipResponse { + public static final String JSON_PROPERTY_VALID = "valid"; + @jakarta.annotation.Nonnull private Boolean valid; + + public static final String JSON_PROPERTY_EXPIRES_AT = "expiresAt"; + @jakarta.annotation.Nonnull private String expiresAt; + + public AddressRegistryVerifyProofOfOwnershipResponse() {} + + @JsonCreator + public AddressRegistryVerifyProofOfOwnershipResponse( + @JsonProperty(value = JSON_PROPERTY_VALID, required = true) Boolean valid, + @JsonProperty(value = JSON_PROPERTY_EXPIRES_AT, required = true) String expiresAt) { + this.valid = valid; + this.expiresAt = expiresAt; + } + + public AddressRegistryVerifyProofOfOwnershipResponse valid( + @jakarta.annotation.Nonnull Boolean valid) { + this.valid = valid; + return this; + } + + /** + * Whether the stored export matches the supplied verification hash and address within + * retention. + * + * @return valid + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_VALID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Boolean getValid() { + return valid; + } + + @JsonProperty(JSON_PROPERTY_VALID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setValid(@jakarta.annotation.Nonnull Boolean valid) { + this.valid = valid; + } + + public AddressRegistryVerifyProofOfOwnershipResponse expiresAt( + @jakarta.annotation.Nonnull String expiresAt) { + this.expiresAt = expiresAt; + return this; + } + + /** + * Inclusive last UTC calendar day (`YYYY-MM-DD`) when `valid` is true; + * empty string when `valid` is false. + * + * @return expiresAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getExpiresAt() { + return expiresAt; + } + + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setExpiresAt(@jakarta.annotation.Nonnull String expiresAt) { + this.expiresAt = expiresAt; + } + + /** Return true if this AddressRegistryVerifyProofOfOwnershipResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AddressRegistryVerifyProofOfOwnershipResponse + addressRegistryVerifyProofOfOwnershipResponse = + (AddressRegistryVerifyProofOfOwnershipResponse) o; + return Objects.equals(this.valid, addressRegistryVerifyProofOfOwnershipResponse.valid) + && Objects.equals( + this.expiresAt, addressRegistryVerifyProofOfOwnershipResponse.expiresAt); + } + + @Override + public int hashCode() { + return Objects.hash(valid, expiresAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AddressRegistryVerifyProofOfOwnershipResponse {\n"); + sb.append(" valid: ").append(toIndentedString(valid)).append("\n"); + sb.append(" expiresAt: ").append(toIndentedString(expiresAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `valid` to the URL query string + if (getValid() != null) { + joiner.add( + String.format( + "%svalid%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getValid())))); + } + + // add `expiresAt` to the URL query string + if (getExpiresAt() != null) { + joiner.add( + String.format( + "%sexpiresAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExpiresAt())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/AllocationWithdrawPayload.java b/src/main/java/com/fireblocks/sdk/model/AllocationWithdrawPayload.java index 5ff3e1e5..313b1b32 100644 --- a/src/main/java/com/fireblocks/sdk/model/AllocationWithdrawPayload.java +++ b/src/main/java/com/fireblocks/sdk/model/AllocationWithdrawPayload.java @@ -17,60 +17,16 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonValue; import com.fireblocks.sdk.ApiClient; import java.util.Objects; import java.util.StringJoiner; /** AllocationWithdrawPayload */ -@JsonPropertyOrder({ - AllocationWithdrawPayload.JSON_PROPERTY_VAULT_ACCOUNT_ID, - AllocationWithdrawPayload.JSON_PROPERTY_ASSET, - AllocationWithdrawPayload.JSON_PROPERTY_ALLOCATION_TRANSACTION_ID -}) +@JsonPropertyOrder({AllocationWithdrawPayload.JSON_PROPERTY_ALLOCATION_TRANSACTION_ID}) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.14.0") public class AllocationWithdrawPayload { - public static final String JSON_PROPERTY_VAULT_ACCOUNT_ID = "vaultAccountId"; - @jakarta.annotation.Nonnull private String vaultAccountId; - - /** Chain asset — `CANTON` or `CANTON_TEST`. */ - public enum AssetEnum { - CANTON(String.valueOf("CANTON")), - - CANTON_TEST(String.valueOf("CANTON_TEST")); - - private String value; - - AssetEnum(String value) { - this.value = value; - } - - @JsonValue - public String getValue() { - return value; - } - - @Override - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static AssetEnum fromValue(String value) { - for (AssetEnum b : AssetEnum.values()) { - if (b.value.equals(value)) { - return b; - } - } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); - } - } - - public static final String JSON_PROPERTY_ASSET = "asset"; - @jakarta.annotation.Nonnull private AssetEnum asset; - public static final String JSON_PROPERTY_ALLOCATION_TRANSACTION_ID = "allocationTransactionId"; @jakarta.annotation.Nonnull private String allocationTransactionId; @@ -78,63 +34,11 @@ public AllocationWithdrawPayload() {} @JsonCreator public AllocationWithdrawPayload( - @JsonProperty(value = JSON_PROPERTY_VAULT_ACCOUNT_ID, required = true) - String vaultAccountId, - @JsonProperty(value = JSON_PROPERTY_ASSET, required = true) AssetEnum asset, @JsonProperty(value = JSON_PROPERTY_ALLOCATION_TRANSACTION_ID, required = true) String allocationTransactionId) { - this.vaultAccountId = vaultAccountId; - this.asset = asset; this.allocationTransactionId = allocationTransactionId; } - public AllocationWithdrawPayload vaultAccountId( - @jakarta.annotation.Nonnull String vaultAccountId) { - this.vaultAccountId = vaultAccountId; - return this; - } - - /** - * The vault account whose Canton wallet acts here. - * - * @return vaultAccountId - */ - @jakarta.annotation.Nonnull - @JsonProperty(JSON_PROPERTY_VAULT_ACCOUNT_ID) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public String getVaultAccountId() { - return vaultAccountId; - } - - @JsonProperty(JSON_PROPERTY_VAULT_ACCOUNT_ID) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setVaultAccountId(@jakarta.annotation.Nonnull String vaultAccountId) { - this.vaultAccountId = vaultAccountId; - } - - public AllocationWithdrawPayload asset(@jakarta.annotation.Nonnull AssetEnum asset) { - this.asset = asset; - return this; - } - - /** - * Chain asset — `CANTON` or `CANTON_TEST`. - * - * @return asset - */ - @jakarta.annotation.Nonnull - @JsonProperty(JSON_PROPERTY_ASSET) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public AssetEnum getAsset() { - return asset; - } - - @JsonProperty(JSON_PROPERTY_ASSET) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setAsset(@jakarta.annotation.Nonnull AssetEnum asset) { - this.asset = asset; - } - public AllocationWithdrawPayload allocationTransactionId( @jakarta.annotation.Nonnull String allocationTransactionId) { this.allocationTransactionId = allocationTransactionId; @@ -171,24 +75,19 @@ public boolean equals(Object o) { return false; } AllocationWithdrawPayload allocationWithdrawPayload = (AllocationWithdrawPayload) o; - return Objects.equals(this.vaultAccountId, allocationWithdrawPayload.vaultAccountId) - && Objects.equals(this.asset, allocationWithdrawPayload.asset) - && Objects.equals( - this.allocationTransactionId, - allocationWithdrawPayload.allocationTransactionId); + return Objects.equals( + this.allocationTransactionId, allocationWithdrawPayload.allocationTransactionId); } @Override public int hashCode() { - return Objects.hash(vaultAccountId, asset, allocationTransactionId); + return Objects.hash(allocationTransactionId); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class AllocationWithdrawPayload {\n"); - sb.append(" vaultAccountId: ").append(toIndentedString(vaultAccountId)).append("\n"); - sb.append(" asset: ").append(toIndentedString(asset)).append("\n"); sb.append(" allocationTransactionId: ") .append(toIndentedString(allocationTransactionId)) .append("\n"); @@ -239,26 +138,6 @@ public String toUrlQueryString(String prefix) { StringJoiner joiner = new StringJoiner("&"); - // add `vaultAccountId` to the URL query string - if (getVaultAccountId() != null) { - joiner.add( - String.format( - "%svaultAccountId%s=%s", - prefix, - suffix, - ApiClient.urlEncode(ApiClient.valueToString(getVaultAccountId())))); - } - - // add `asset` to the URL query string - if (getAsset() != null) { - joiner.add( - String.format( - "%sasset%s=%s", - prefix, - suffix, - ApiClient.urlEncode(ApiClient.valueToString(getAsset())))); - } - // add `allocationTransactionId` to the URL query string if (getAllocationTransactionId() != null) { joiner.add( diff --git a/src/main/java/com/fireblocks/sdk/model/CantonCallDetails.java b/src/main/java/com/fireblocks/sdk/model/CantonCallDetails.java new file mode 100644 index 00000000..f3eb02bb --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/CantonCallDetails.java @@ -0,0 +1,305 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** A call made through the Canton calls endpoint. Written once and never changed. */ +@JsonPropertyOrder({ + CantonCallDetails.JSON_PROPERTY_VERSION, + CantonCallDetails.JSON_PROPERTY_DOMAIN, + CantonCallDetails.JSON_PROPERTY_TYPE, + CantonCallDetails.JSON_PROPERTY_VENDOR, + CantonCallDetails.JSON_PROPERTY_ORIGINAL_TRANSACTION_ID +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class CantonCallDetails { + public static final String JSON_PROPERTY_VERSION = "version"; + @jakarta.annotation.Nullable private Integer version; + + public static final String JSON_PROPERTY_DOMAIN = "domain"; + @jakarta.annotation.Nullable private CantonDomainEnum domain; + + public static final String JSON_PROPERTY_TYPE = "type"; + @jakarta.annotation.Nullable private String type; + + public static final String JSON_PROPERTY_VENDOR = "vendor"; + @jakarta.annotation.Nullable private CantonVendorEnum vendor; + + public static final String JSON_PROPERTY_ORIGINAL_TRANSACTION_ID = "originalTransactionId"; + @jakarta.annotation.Nullable private String originalTransactionId; + + public CantonCallDetails() {} + + public CantonCallDetails version(@jakarta.annotation.Nullable Integer version) { + this.version = version; + return this; + } + + /** + * The shape of this block. Stamped at creation and never changed, so a reader always knows + * which version it is holding. + * + * @return version + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getVersion() { + return version; + } + + @JsonProperty(JSON_PROPERTY_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@jakarta.annotation.Nullable Integer version) { + this.version = version; + } + + public CantonCallDetails domain(@jakarta.annotation.Nullable CantonDomainEnum domain) { + this.domain = domain; + return this; + } + + /** + * Get domain + * + * @return domain + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DOMAIN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonDomainEnum getDomain() { + return domain; + } + + @JsonProperty(JSON_PROPERTY_DOMAIN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDomain(@jakarta.annotation.Nullable CantonDomainEnum domain) { + this.domain = domain; + } + + public CantonCallDetails type(@jakarta.annotation.Nullable String type) { + this.type = type; + return this; + } + + /** + * The call type, matching the `type` sent when the call was created. + * + * @return type + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setType(@jakarta.annotation.Nullable String type) { + this.type = type; + } + + public CantonCallDetails vendor(@jakarta.annotation.Nullable CantonVendorEnum vendor) { + this.vendor = vendor; + return this; + } + + /** + * Get vendor + * + * @return vendor + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VENDOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonVendorEnum getVendor() { + return vendor; + } + + @JsonProperty(JSON_PROPERTY_VENDOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVendor(@jakarta.annotation.Nullable CantonVendorEnum vendor) { + this.vendor = vendor; + } + + public CantonCallDetails originalTransactionId( + @jakarta.annotation.Nullable String originalTransactionId) { + this.originalTransactionId = originalTransactionId; + return this; + } + + /** + * The transaction this call acts on. On a withdraw it is the allocation that was withdrawn, so + * the withdraw transaction read on its own still says what it withdrew. + * + * @return originalTransactionId + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ORIGINAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getOriginalTransactionId() { + return originalTransactionId; + } + + @JsonProperty(JSON_PROPERTY_ORIGINAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOriginalTransactionId( + @jakarta.annotation.Nullable String originalTransactionId) { + this.originalTransactionId = originalTransactionId; + } + + /** Return true if this CantonCallDetails object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CantonCallDetails cantonCallDetails = (CantonCallDetails) o; + return Objects.equals(this.version, cantonCallDetails.version) + && Objects.equals(this.domain, cantonCallDetails.domain) + && Objects.equals(this.type, cantonCallDetails.type) + && Objects.equals(this.vendor, cantonCallDetails.vendor) + && Objects.equals( + this.originalTransactionId, cantonCallDetails.originalTransactionId); + } + + @Override + public int hashCode() { + return Objects.hash(version, domain, type, vendor, originalTransactionId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CantonCallDetails {\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" domain: ").append(toIndentedString(domain)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" vendor: ").append(toIndentedString(vendor)).append("\n"); + sb.append(" originalTransactionId: ") + .append(toIndentedString(originalTransactionId)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add( + String.format( + "%sversion%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `domain` to the URL query string + if (getDomain() != null) { + joiner.add( + String.format( + "%sdomain%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getDomain())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add( + String.format( + "%stype%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `vendor` to the URL query string + if (getVendor() != null) { + joiner.add( + String.format( + "%svendor%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVendor())))); + } + + // add `originalTransactionId` to the URL query string + if (getOriginalTransactionId() != null) { + joiner.add( + String.format( + "%soriginalTransactionId%s=%s", + prefix, + suffix, + ApiClient.urlEncode( + ApiClient.valueToString(getOriginalTransactionId())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/CantonDetails.java b/src/main/java/com/fireblocks/sdk/model/CantonDetails.java new file mode 100644 index 00000000..813a855b --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/CantonDetails.java @@ -0,0 +1,219 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Canton transaction context. Present on transactions that belong to a Canton flow, and the + * authoritative signal that a transaction IS one — do not branch on `operation`, which is + * `CANTON_CALL` for customer-initiated calls but `TRANSFER` for an incoming + * Canton transfer offer. **No `cantonDetails` at all means the transaction is not a + * Canton item.** The service sets exactly one of `offerResponse`, `call` or + * `settlement`. That is a guarantee about what is sent, NOT a constraint this schema + * enforces: the three are declared as independent optional properties on purpose, so that a + * response carrying a block a client does not yet know about — or a row written before a block type + * existed — still validates. Response schemas here stay additive. Read the block you recognise; do + * not reject a payload for the shape of the others. Every block carries `version`, + * stamped when the transaction is created and never changed — a transaction written today keeps its + * shape, so `version` is how you know which shape you are reading. + */ +@JsonPropertyOrder({ + CantonDetails.JSON_PROPERTY_OFFER_RESPONSE, + CantonDetails.JSON_PROPERTY_CALL, + CantonDetails.JSON_PROPERTY_SETTLEMENT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class CantonDetails { + public static final String JSON_PROPERTY_OFFER_RESPONSE = "offerResponse"; + @jakarta.annotation.Nullable private CantonOfferResponseDetails offerResponse; + + public static final String JSON_PROPERTY_CALL = "call"; + @jakarta.annotation.Nullable private CantonCallDetails call; + + public static final String JSON_PROPERTY_SETTLEMENT = "settlement"; + @jakarta.annotation.Nullable private CantonSettlementDetails settlement; + + public CantonDetails() {} + + public CantonDetails offerResponse( + @jakarta.annotation.Nullable CantonOfferResponseDetails offerResponse) { + this.offerResponse = offerResponse; + return this; + } + + /** + * Get offerResponse + * + * @return offerResponse + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OFFER_RESPONSE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonOfferResponseDetails getOfferResponse() { + return offerResponse; + } + + @JsonProperty(JSON_PROPERTY_OFFER_RESPONSE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOfferResponse( + @jakarta.annotation.Nullable CantonOfferResponseDetails offerResponse) { + this.offerResponse = offerResponse; + } + + public CantonDetails call(@jakarta.annotation.Nullable CantonCallDetails call) { + this.call = call; + return this; + } + + /** + * Get call + * + * @return call + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CALL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonCallDetails getCall() { + return call; + } + + @JsonProperty(JSON_PROPERTY_CALL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCall(@jakarta.annotation.Nullable CantonCallDetails call) { + this.call = call; + } + + public CantonDetails settlement( + @jakarta.annotation.Nullable CantonSettlementDetails settlement) { + this.settlement = settlement; + return this; + } + + /** + * Get settlement + * + * @return settlement + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SETTLEMENT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonSettlementDetails getSettlement() { + return settlement; + } + + @JsonProperty(JSON_PROPERTY_SETTLEMENT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSettlement(@jakarta.annotation.Nullable CantonSettlementDetails settlement) { + this.settlement = settlement; + } + + /** Return true if this CantonDetails object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CantonDetails cantonDetails = (CantonDetails) o; + return Objects.equals(this.offerResponse, cantonDetails.offerResponse) + && Objects.equals(this.call, cantonDetails.call) + && Objects.equals(this.settlement, cantonDetails.settlement); + } + + @Override + public int hashCode() { + return Objects.hash(offerResponse, call, settlement); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CantonDetails {\n"); + sb.append(" offerResponse: ").append(toIndentedString(offerResponse)).append("\n"); + sb.append(" call: ").append(toIndentedString(call)).append("\n"); + sb.append(" settlement: ").append(toIndentedString(settlement)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `offerResponse` to the URL query string + if (getOfferResponse() != null) { + joiner.add(getOfferResponse().toUrlQueryString(prefix + "offerResponse" + suffix)); + } + + // add `call` to the URL query string + if (getCall() != null) { + joiner.add(getCall().toUrlQueryString(prefix + "call" + suffix)); + } + + // add `settlement` to the URL query string + if (getSettlement() != null) { + joiner.add(getSettlement().toUrlQueryString(prefix + "settlement" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProvider.java b/src/main/java/com/fireblocks/sdk/model/CantonDomainEnum.java similarity index 71% rename from src/main/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProvider.java rename to src/main/java/com/fireblocks/sdk/model/CantonDomainEnum.java index a270532e..600f84ca 100644 --- a/src/main/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProvider.java +++ b/src/main/java/com/fireblocks/sdk/model/CantonDomainEnum.java @@ -16,19 +16,20 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -/** Travel Rule provider identifier (string enum value). */ -public enum AddressRegistryTravelRuleProvider { - TRAVEL_RULE_PROVIDER_NOTABENE("TRAVEL_RULE_PROVIDER_NOTABENE"), - - TRAVEL_RULE_PROVIDER_SYGNA("TRAVEL_RULE_PROVIDER_SYGNA"), +/** + * The Canton domain a transaction belongs to. Singular, and it matches the prefix of the + * `type` / `responseType` values in the same domain character for character. + */ +public enum CantonDomainEnum { + ONBOARDING("ONBOARDING"), - TRAVEL_RULE_PROVIDER_TRISA("TRAVEL_RULE_PROVIDER_TRISA"), + ALLOCATION("ALLOCATION"), - TRAVEL_RULE_PROVIDER_OPENVASP("TRAVEL_RULE_PROVIDER_OPENVASP"); + TRANSFER("TRANSFER"); private String value; - AddressRegistryTravelRuleProvider(String value) { + CantonDomainEnum(String value) { this.value = value; } @@ -43,8 +44,8 @@ public String toString() { } @JsonCreator - public static AddressRegistryTravelRuleProvider fromValue(String value) { - for (AddressRegistryTravelRuleProvider b : AddressRegistryTravelRuleProvider.values()) { + public static CantonDomainEnum fromValue(String value) { + for (CantonDomainEnum b : CantonDomainEnum.values()) { if (b.value.equals(value)) { return b; } diff --git a/src/main/java/com/fireblocks/sdk/model/CantonOfferResponseDetails.java b/src/main/java/com/fireblocks/sdk/model/CantonOfferResponseDetails.java new file mode 100644 index 00000000..384143a1 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/CantonOfferResponseDetails.java @@ -0,0 +1,501 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fireblocks.sdk.ApiClient; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * The transaction belongs to an offer conversation: the offer itself, the response to it, or a leg + * that carries no answer of its own. The only block that changes over a transaction's lifetime. + */ +@JsonPropertyOrder({ + CantonOfferResponseDetails.JSON_PROPERTY_VERSION, + CantonOfferResponseDetails.JSON_PROPERTY_DOMAIN, + CantonOfferResponseDetails.JSON_PROPERTY_VENDOR, + CantonOfferResponseDetails.JSON_PROPERTY_AVAILABLE_RESPONSES, + CantonOfferResponseDetails.JSON_PROPERTY_EXPIRES_AT, + CantonOfferResponseDetails.JSON_PROPERTY_APPROVAL_TRANSACTION_ID, + CantonOfferResponseDetails.JSON_PROPERTY_ORIGINAL_TRANSACTION_ID, + CantonOfferResponseDetails.JSON_PROPERTY_VERDICT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class CantonOfferResponseDetails { + public static final String JSON_PROPERTY_VERSION = "version"; + @jakarta.annotation.Nullable private Integer version; + + public static final String JSON_PROPERTY_DOMAIN = "domain"; + @jakarta.annotation.Nullable private CantonDomainEnum domain; + + public static final String JSON_PROPERTY_VENDOR = "vendor"; + @jakarta.annotation.Nullable private CantonVendorEnum vendor; + + public static final String JSON_PROPERTY_AVAILABLE_RESPONSES = "availableResponses"; + @jakarta.annotation.Nullable private List availableResponses; + + public static final String JSON_PROPERTY_EXPIRES_AT = "expiresAt"; + @jakarta.annotation.Nullable private OffsetDateTime expiresAt; + + public static final String JSON_PROPERTY_APPROVAL_TRANSACTION_ID = "approvalTransactionId"; + @jakarta.annotation.Nullable private String approvalTransactionId; + + public static final String JSON_PROPERTY_ORIGINAL_TRANSACTION_ID = "originalTransactionId"; + @jakarta.annotation.Nullable private String originalTransactionId; + + /** The outcome, set once the transaction reaches a terminal status. */ + public enum VerdictEnum { + ACCEPTED(String.valueOf("ACCEPTED")), + + REJECTED(String.valueOf("REJECTED")); + + private String value; + + VerdictEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static VerdictEnum fromValue(String value) { + for (VerdictEnum b : VerdictEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_VERDICT = "verdict"; + @jakarta.annotation.Nullable private VerdictEnum verdict; + + public CantonOfferResponseDetails() {} + + public CantonOfferResponseDetails version(@jakarta.annotation.Nullable Integer version) { + this.version = version; + return this; + } + + /** + * The shape of this block. Stamped at creation and never changed, so a reader always knows + * which version it is holding. + * + * @return version + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getVersion() { + return version; + } + + @JsonProperty(JSON_PROPERTY_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@jakarta.annotation.Nullable Integer version) { + this.version = version; + } + + public CantonOfferResponseDetails domain(@jakarta.annotation.Nullable CantonDomainEnum domain) { + this.domain = domain; + return this; + } + + /** + * Get domain + * + * @return domain + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DOMAIN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonDomainEnum getDomain() { + return domain; + } + + @JsonProperty(JSON_PROPERTY_DOMAIN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDomain(@jakarta.annotation.Nullable CantonDomainEnum domain) { + this.domain = domain; + } + + public CantonOfferResponseDetails vendor(@jakarta.annotation.Nullable CantonVendorEnum vendor) { + this.vendor = vendor; + return this; + } + + /** + * Get vendor + * + * @return vendor + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VENDOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonVendorEnum getVendor() { + return vendor; + } + + @JsonProperty(JSON_PROPERTY_VENDOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVendor(@jakarta.annotation.Nullable CantonVendorEnum vendor) { + this.vendor = vendor; + } + + public CantonOfferResponseDetails availableResponses( + @jakarta.annotation.Nullable List availableResponses) { + this.availableResponses = availableResponses; + return this; + } + + public CantonOfferResponseDetails addAvailableResponsesItem(String availableResponsesItem) { + if (this.availableResponses == null) { + this.availableResponses = new ArrayList<>(); + } + this.availableResponses.add(availableResponsesItem); + return this; + } + + /** + * The responses that can be sent for this offer right now. An empty array means nothing is + * answerable on this transaction — which is the difference between an actionable offer and a + * linked leg that shares its sub-status. + * + * @return availableResponses + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AVAILABLE_RESPONSES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getAvailableResponses() { + return availableResponses; + } + + @JsonProperty(JSON_PROPERTY_AVAILABLE_RESPONSES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAvailableResponses( + @jakarta.annotation.Nullable List availableResponses) { + this.availableResponses = availableResponses; + } + + public CantonOfferResponseDetails expiresAt( + @jakarta.annotation.Nullable OffsetDateTime expiresAt) { + this.expiresAt = expiresAt; + return this; + } + + /** + * When the offer expires, where it has a deadline. + * + * @return expiresAt + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OffsetDateTime getExpiresAt() { + return expiresAt; + } + + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setExpiresAt(@jakarta.annotation.Nullable OffsetDateTime expiresAt) { + this.expiresAt = expiresAt; + } + + public CantonOfferResponseDetails approvalTransactionId( + @jakarta.annotation.Nullable String approvalTransactionId) { + this.approvalTransactionId = approvalTransactionId; + return this; + } + + /** + * The response transaction, once one has been dispatched for this offer. + * + * @return approvalTransactionId + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_APPROVAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getApprovalTransactionId() { + return approvalTransactionId; + } + + @JsonProperty(JSON_PROPERTY_APPROVAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApprovalTransactionId( + @jakarta.annotation.Nullable String approvalTransactionId) { + this.approvalTransactionId = approvalTransactionId; + } + + public CantonOfferResponseDetails originalTransactionId( + @jakarta.annotation.Nullable String originalTransactionId) { + this.originalTransactionId = originalTransactionId; + return this; + } + + /** + * The transaction this one relates to — the offer a response answered. + * + * @return originalTransactionId + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ORIGINAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getOriginalTransactionId() { + return originalTransactionId; + } + + @JsonProperty(JSON_PROPERTY_ORIGINAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOriginalTransactionId( + @jakarta.annotation.Nullable String originalTransactionId) { + this.originalTransactionId = originalTransactionId; + } + + public CantonOfferResponseDetails verdict(@jakarta.annotation.Nullable VerdictEnum verdict) { + this.verdict = verdict; + return this; + } + + /** + * The outcome, set once the transaction reaches a terminal status. + * + * @return verdict + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VERDICT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public VerdictEnum getVerdict() { + return verdict; + } + + @JsonProperty(JSON_PROPERTY_VERDICT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVerdict(@jakarta.annotation.Nullable VerdictEnum verdict) { + this.verdict = verdict; + } + + /** Return true if this CantonOfferResponseDetails object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CantonOfferResponseDetails cantonOfferResponseDetails = (CantonOfferResponseDetails) o; + return Objects.equals(this.version, cantonOfferResponseDetails.version) + && Objects.equals(this.domain, cantonOfferResponseDetails.domain) + && Objects.equals(this.vendor, cantonOfferResponseDetails.vendor) + && Objects.equals( + this.availableResponses, cantonOfferResponseDetails.availableResponses) + && Objects.equals(this.expiresAt, cantonOfferResponseDetails.expiresAt) + && Objects.equals( + this.approvalTransactionId, + cantonOfferResponseDetails.approvalTransactionId) + && Objects.equals( + this.originalTransactionId, + cantonOfferResponseDetails.originalTransactionId) + && Objects.equals(this.verdict, cantonOfferResponseDetails.verdict); + } + + @Override + public int hashCode() { + return Objects.hash( + version, + domain, + vendor, + availableResponses, + expiresAt, + approvalTransactionId, + originalTransactionId, + verdict); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CantonOfferResponseDetails {\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" domain: ").append(toIndentedString(domain)).append("\n"); + sb.append(" vendor: ").append(toIndentedString(vendor)).append("\n"); + sb.append(" availableResponses: ") + .append(toIndentedString(availableResponses)) + .append("\n"); + sb.append(" expiresAt: ").append(toIndentedString(expiresAt)).append("\n"); + sb.append(" approvalTransactionId: ") + .append(toIndentedString(approvalTransactionId)) + .append("\n"); + sb.append(" originalTransactionId: ") + .append(toIndentedString(originalTransactionId)) + .append("\n"); + sb.append(" verdict: ").append(toIndentedString(verdict)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add( + String.format( + "%sversion%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `domain` to the URL query string + if (getDomain() != null) { + joiner.add( + String.format( + "%sdomain%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getDomain())))); + } + + // add `vendor` to the URL query string + if (getVendor() != null) { + joiner.add( + String.format( + "%svendor%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVendor())))); + } + + // add `availableResponses` to the URL query string + if (getAvailableResponses() != null) { + for (int i = 0; i < getAvailableResponses().size(); i++) { + joiner.add( + String.format( + "%savailableResponses%s%s=%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format( + "%s%d%s", containerPrefix, i, containerSuffix), + ApiClient.urlEncode( + ApiClient.valueToString(getAvailableResponses().get(i))))); + } + } + + // add `expiresAt` to the URL query string + if (getExpiresAt() != null) { + joiner.add( + String.format( + "%sexpiresAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExpiresAt())))); + } + + // add `approvalTransactionId` to the URL query string + if (getApprovalTransactionId() != null) { + joiner.add( + String.format( + "%sapprovalTransactionId%s=%s", + prefix, + suffix, + ApiClient.urlEncode( + ApiClient.valueToString(getApprovalTransactionId())))); + } + + // add `originalTransactionId` to the URL query string + if (getOriginalTransactionId() != null) { + joiner.add( + String.format( + "%soriginalTransactionId%s=%s", + prefix, + suffix, + ApiClient.urlEncode( + ApiClient.valueToString(getOriginalTransactionId())))); + } + + // add `verdict` to the URL query string + if (getVerdict() != null) { + joiner.add( + String.format( + "%sverdict%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVerdict())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/CantonSettlementDetails.java b/src/main/java/com/fireblocks/sdk/model/CantonSettlementDetails.java new file mode 100644 index 00000000..638316dd --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/CantonSettlementDetails.java @@ -0,0 +1,268 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * The credit side of a delivery-versus-payment: a venue settled an allocation. Written once, at + * creation — the transaction is already complete when it appears. + */ +@JsonPropertyOrder({ + CantonSettlementDetails.JSON_PROPERTY_VERSION, + CantonSettlementDetails.JSON_PROPERTY_DOMAIN, + CantonSettlementDetails.JSON_PROPERTY_TYPE, + CantonSettlementDetails.JSON_PROPERTY_ORIGINAL_TRANSACTION_ID +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class CantonSettlementDetails { + public static final String JSON_PROPERTY_VERSION = "version"; + @jakarta.annotation.Nullable private Integer version; + + public static final String JSON_PROPERTY_DOMAIN = "domain"; + @jakarta.annotation.Nullable private CantonDomainEnum domain; + + public static final String JSON_PROPERTY_TYPE = "type"; + @jakarta.annotation.Nullable private String type; + + public static final String JSON_PROPERTY_ORIGINAL_TRANSACTION_ID = "originalTransactionId"; + @jakarta.annotation.Nullable private String originalTransactionId; + + public CantonSettlementDetails() {} + + public CantonSettlementDetails version(@jakarta.annotation.Nullable Integer version) { + this.version = version; + return this; + } + + /** + * The shape of this block. Stamped at creation and never changed, so a reader always knows + * which version it is holding. + * + * @return version + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getVersion() { + return version; + } + + @JsonProperty(JSON_PROPERTY_VERSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@jakarta.annotation.Nullable Integer version) { + this.version = version; + } + + public CantonSettlementDetails domain(@jakarta.annotation.Nullable CantonDomainEnum domain) { + this.domain = domain; + return this; + } + + /** + * Get domain + * + * @return domain + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DOMAIN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonDomainEnum getDomain() { + return domain; + } + + @JsonProperty(JSON_PROPERTY_DOMAIN) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDomain(@jakarta.annotation.Nullable CantonDomainEnum domain) { + this.domain = domain; + } + + public CantonSettlementDetails type(@jakarta.annotation.Nullable String type) { + this.type = type; + return this; + } + + /** + * The settlement type. + * + * @return type + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setType(@jakarta.annotation.Nullable String type) { + this.type = type; + } + + public CantonSettlementDetails originalTransactionId( + @jakarta.annotation.Nullable String originalTransactionId) { + this.originalTransactionId = originalTransactionId; + return this; + } + + /** + * The allocation this receipt settles. + * + * @return originalTransactionId + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ORIGINAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getOriginalTransactionId() { + return originalTransactionId; + } + + @JsonProperty(JSON_PROPERTY_ORIGINAL_TRANSACTION_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOriginalTransactionId( + @jakarta.annotation.Nullable String originalTransactionId) { + this.originalTransactionId = originalTransactionId; + } + + /** Return true if this CantonSettlementDetails object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CantonSettlementDetails cantonSettlementDetails = (CantonSettlementDetails) o; + return Objects.equals(this.version, cantonSettlementDetails.version) + && Objects.equals(this.domain, cantonSettlementDetails.domain) + && Objects.equals(this.type, cantonSettlementDetails.type) + && Objects.equals( + this.originalTransactionId, cantonSettlementDetails.originalTransactionId); + } + + @Override + public int hashCode() { + return Objects.hash(version, domain, type, originalTransactionId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CantonSettlementDetails {\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" domain: ").append(toIndentedString(domain)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" originalTransactionId: ") + .append(toIndentedString(originalTransactionId)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add( + String.format( + "%sversion%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `domain` to the URL query string + if (getDomain() != null) { + joiner.add( + String.format( + "%sdomain%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getDomain())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add( + String.format( + "%stype%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `originalTransactionId` to the URL query string + if (getOriginalTransactionId() != null) { + joiner.add( + String.format( + "%soriginalTransactionId%s=%s", + prefix, + suffix, + ApiClient.urlEncode( + ApiClient.valueToString(getOriginalTransactionId())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/CantonVendorEnum.java b/src/main/java/com/fireblocks/sdk/model/CantonVendorEnum.java new file mode 100644 index 00000000..46a61e60 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/CantonVendorEnum.java @@ -0,0 +1,67 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * The vendor whose flow this is. Present only where the flow is vendor-specific — absent on + * vendor-neutral Splice operations such as allocation withdraw. + */ +public enum CantonVendorEnum { + DTCC("DTCC"), + + TRADEWEB("TRADEWEB"); + + private String value; + + CantonVendorEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static CantonVendorEnum fromValue(String value) { + for (CantonVendorEnum b : CantonVendorEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/AddressRegistryError.java b/src/main/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequest.java similarity index 57% rename from src/main/java/com/fireblocks/sdk/model/AddressRegistryError.java rename to src/main/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequest.java index 76a5096e..aa41bd16 100644 --- a/src/main/java/com/fireblocks/sdk/model/AddressRegistryError.java +++ b/src/main/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequest.java @@ -21,79 +21,80 @@ import java.util.Objects; import java.util.StringJoiner; -/** Error body for address registry operations (4xx and 5xx). */ +/** CreateWebhookMtlsConfigRequest */ @JsonPropertyOrder({ - AddressRegistryError.JSON_PROPERTY_CODE, - AddressRegistryError.JSON_PROPERTY_MESSAGE + CreateWebhookMtlsConfigRequest.JSON_PROPERTY_NAME, + CreateWebhookMtlsConfigRequest.JSON_PROPERTY_SIGNED_CERT }) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.14.0") -public class AddressRegistryError { - public static final String JSON_PROPERTY_CODE = "code"; - @jakarta.annotation.Nullable private Integer code; +public class CreateWebhookMtlsConfigRequest { + public static final String JSON_PROPERTY_NAME = "name"; + @jakarta.annotation.Nullable private String name; - public static final String JSON_PROPERTY_MESSAGE = "message"; - @jakarta.annotation.Nonnull private String message; + public static final String JSON_PROPERTY_SIGNED_CERT = "signedCert"; + @jakarta.annotation.Nonnull private String signedCert; - public AddressRegistryError() {} + public CreateWebhookMtlsConfigRequest() {} @JsonCreator - public AddressRegistryError( - @JsonProperty(value = JSON_PROPERTY_MESSAGE, required = true) String message) { - this.message = message; + public CreateWebhookMtlsConfigRequest( + @JsonProperty(value = JSON_PROPERTY_SIGNED_CERT, required = true) String signedCert) { + this.signedCert = signedCert; } - public AddressRegistryError code(@jakarta.annotation.Nullable Integer code) { - this.code = code; + public CreateWebhookMtlsConfigRequest name(@jakarta.annotation.Nullable String name) { + this.name = name; return this; } /** - * Application error code when present. For HTTP 400 on legal-entity lookup, distinguish: 4100 — - * request validation (e.g. missing, empty, or whitespace-only `address` after trim); - * 2140 — workspace not opted in to the address registry (`AR_OPT_IN_REQUIRED`). 2142 - * — not found (404). Other codes may appear, including on server errors. + * A label for this mTLS configuration, to tell several certificates apart. Letters, digits and + * spaces only. * - * @return code + * @return name */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_CODE) + @JsonProperty(JSON_PROPERTY_NAME) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public Integer getCode() { - return code; + public String getName() { + return name; } - @JsonProperty(JSON_PROPERTY_CODE) + @JsonProperty(JSON_PROPERTY_NAME) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setCode(@jakarta.annotation.Nullable Integer code) { - this.code = code; + public void setName(@jakarta.annotation.Nullable String name) { + this.name = name; } - public AddressRegistryError message(@jakarta.annotation.Nonnull String message) { - this.message = message; + public CreateWebhookMtlsConfigRequest signedCert( + @jakarta.annotation.Nonnull String signedCert) { + this.signedCert = signedCert; return this; } /** - * Human-readable error message + * Signed client certificate PEM, issued for the CSR from `GET + * /v1/webhooks_settings/mtls_csr`. The private key it belongs to is derived from the + * certificate itself. * - * @return message + * @return signedCert */ @jakarta.annotation.Nonnull - @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public String getMessage() { - return message; + public String getSignedCert() { + return signedCert; } - @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setMessage(@jakarta.annotation.Nonnull String message) { - this.message = message; + public void setSignedCert(@jakarta.annotation.Nonnull String signedCert) { + this.signedCert = signedCert; } - /** Return true if this AddressRegistryError object is equal to o. */ + /** Return true if this CreateWebhookMtlsConfigRequest object is equal to o. */ @Override public boolean equals(Object o) { if (this == o) { @@ -102,22 +103,23 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - AddressRegistryError addressRegistryError = (AddressRegistryError) o; - return Objects.equals(this.code, addressRegistryError.code) - && Objects.equals(this.message, addressRegistryError.message); + CreateWebhookMtlsConfigRequest createWebhookMtlsConfigRequest = + (CreateWebhookMtlsConfigRequest) o; + return Objects.equals(this.name, createWebhookMtlsConfigRequest.name) + && Objects.equals(this.signedCert, createWebhookMtlsConfigRequest.signedCert); } @Override public int hashCode() { - return Objects.hash(code, message); + return Objects.hash(name, signedCert); } @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class AddressRegistryError {\n"); - sb.append(" code: ").append(toIndentedString(code)).append("\n"); - sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append("class CreateWebhookMtlsConfigRequest {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" signedCert: ").append(toIndentedString(signedCert)).append("\n"); sb.append("}"); return sb.toString(); } @@ -165,24 +167,24 @@ public String toUrlQueryString(String prefix) { StringJoiner joiner = new StringJoiner("&"); - // add `code` to the URL query string - if (getCode() != null) { + // add `name` to the URL query string + if (getName() != null) { joiner.add( String.format( - "%scode%s=%s", + "%sname%s=%s", prefix, suffix, - ApiClient.urlEncode(ApiClient.valueToString(getCode())))); + ApiClient.urlEncode(ApiClient.valueToString(getName())))); } - // add `message` to the URL query string - if (getMessage() != null) { + // add `signedCert` to the URL query string + if (getSignedCert() != null) { joiner.add( String.format( - "%smessage%s=%s", + "%ssignedCert%s=%s", prefix, suffix, - ApiClient.urlEncode(ApiClient.valueToString(getMessage())))); + ApiClient.urlEncode(ApiClient.valueToString(getSignedCert())))); } return joiner.toString(); diff --git a/src/main/java/com/fireblocks/sdk/model/CreateWebhookOauthRequest.java b/src/main/java/com/fireblocks/sdk/model/CreateWebhookOauthRequest.java index 5ddcdd0f..ab9be421 100644 --- a/src/main/java/com/fireblocks/sdk/model/CreateWebhookOauthRequest.java +++ b/src/main/java/com/fireblocks/sdk/model/CreateWebhookOauthRequest.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Objects; import java.util.StringJoiner; +import java.util.UUID; /** * A new reusable OAuth 2.0 client credential set. Attach it to a webhook by passing the returned id @@ -37,7 +38,7 @@ CreateWebhookOauthRequest.JSON_PROPERTY_CUSTOM_JWT_CLAIMS, CreateWebhookOauthRequest.JSON_PROPERTY_CUSTOM_BODY_PARAMS, CreateWebhookOauthRequest.JSON_PROPERTY_CUSTOM_HEADERS, - CreateWebhookOauthRequest.JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT + CreateWebhookOauthRequest.JSON_PROPERTY_WEBHOOK_MTLS_ID }) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", @@ -67,8 +68,8 @@ public class CreateWebhookOauthRequest { public static final String JSON_PROPERTY_CUSTOM_HEADERS = "customHeaders"; @jakarta.annotation.Nullable private Map customHeaders; - public static final String JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT = "mtlsClientSignedCert"; - @jakarta.annotation.Nullable private String mtlsClientSignedCert; + public static final String JSON_PROPERTY_WEBHOOK_MTLS_ID = "webhookMtlsId"; + @jakarta.annotation.Nullable private UUID webhookMtlsId; public CreateWebhookOauthRequest() {} @@ -331,29 +332,34 @@ public void setCustomHeaders(@jakarta.annotation.Nullable Map cu this.customHeaders = customHeaders; } - public CreateWebhookOauthRequest mtlsClientSignedCert( - @jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public CreateWebhookOauthRequest webhookMtlsId( + @jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; return this; } /** - * PEM-encoded client certificate for mTLS when fetching tokens. Must be a valid X.509 - * certificate inside its validity window. + * The id of the mTLS configuration presented to the token endpoint, from + * `/v1/webhooks_settings/mtls`. It can be the same configuration a webhook uses, so + * one certificate, signed from `GET /v1/webhooks_settings/mtls_csr`, serves both the + * token endpoint and the receiver. Omit, or send `null`, for a token request without + * mTLS. Requires the mTLS feature to be enabled for the workspace (`403` otherwise), + * a configuration of this workspace (`404` otherwise), and one linked to a private + * key (`400` otherwise). * - * @return mtlsClientSignedCert + * @return webhookMtlsId */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public String getMtlsClientSignedCert() { - return mtlsClientSignedCert; + public UUID getWebhookMtlsId() { + return webhookMtlsId; } - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMtlsClientSignedCert(@jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public void setWebhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; } /** Return true if this CreateWebhookOauthRequest object is equal to o. */ @@ -374,8 +380,7 @@ public boolean equals(Object o) { && Objects.equals(this.customJwtClaims, createWebhookOauthRequest.customJwtClaims) && Objects.equals(this.customBodyParams, createWebhookOauthRequest.customBodyParams) && Objects.equals(this.customHeaders, createWebhookOauthRequest.customHeaders) - && Objects.equals( - this.mtlsClientSignedCert, createWebhookOauthRequest.mtlsClientSignedCert); + && Objects.equals(this.webhookMtlsId, createWebhookOauthRequest.webhookMtlsId); } @Override @@ -389,7 +394,7 @@ public int hashCode() { customJwtClaims, customBodyParams, customHeaders, - mtlsClientSignedCert); + webhookMtlsId); } @Override @@ -404,9 +409,7 @@ public String toString() { sb.append(" customJwtClaims: ").append(toIndentedString(customJwtClaims)).append("\n"); sb.append(" customBodyParams: ").append(toIndentedString(customBodyParams)).append("\n"); sb.append(" customHeaders: ").append(toIndentedString(customHeaders)).append("\n"); - sb.append(" mtlsClientSignedCert: ") - .append(toIndentedString(mtlsClientSignedCert)) - .append("\n"); + sb.append(" webhookMtlsId: ").append(toIndentedString(webhookMtlsId)).append("\n"); sb.append("}"); return sb.toString(); } @@ -558,15 +561,14 @@ public String toUrlQueryString(String prefix) { } } - // add `mtlsClientSignedCert` to the URL query string - if (getMtlsClientSignedCert() != null) { + // add `webhookMtlsId` to the URL query string + if (getWebhookMtlsId() != null) { joiner.add( String.format( - "%smtlsClientSignedCert%s=%s", + "%swebhookMtlsId%s=%s", prefix, suffix, - ApiClient.urlEncode( - ApiClient.valueToString(getMtlsClientSignedCert())))); + ApiClient.urlEncode(ApiClient.valueToString(getWebhookMtlsId())))); } return joiner.toString(); diff --git a/src/main/java/com/fireblocks/sdk/model/CreateWebhookRequest.java b/src/main/java/com/fireblocks/sdk/model/CreateWebhookRequest.java index 2fec4969..05222d1d 100644 --- a/src/main/java/com/fireblocks/sdk/model/CreateWebhookRequest.java +++ b/src/main/java/com/fireblocks/sdk/model/CreateWebhookRequest.java @@ -32,7 +32,7 @@ CreateWebhookRequest.JSON_PROPERTY_DESCRIPTION, CreateWebhookRequest.JSON_PROPERTY_EVENTS, CreateWebhookRequest.JSON_PROPERTY_ENABLED, - CreateWebhookRequest.JSON_PROPERTY_MTLS, + CreateWebhookRequest.JSON_PROPERTY_WEBHOOK_MTLS_ID, CreateWebhookRequest.JSON_PROPERTY_WEBHOOK_OAUTH_ID, CreateWebhookRequest.JSON_PROPERTY_CUSTOM_HEADERS }) @@ -52,8 +52,8 @@ public class CreateWebhookRequest { public static final String JSON_PROPERTY_ENABLED = "enabled"; @jakarta.annotation.Nullable private Boolean enabled = true; - public static final String JSON_PROPERTY_MTLS = "mtls"; - @jakarta.annotation.Nullable private WebhookMtls mtls; + public static final String JSON_PROPERTY_WEBHOOK_MTLS_ID = "webhookMtlsId"; + @jakarta.annotation.Nullable private UUID webhookMtlsId; public static final String JSON_PROPERTY_WEBHOOK_OAUTH_ID = "webhookOauthId"; @jakarta.annotation.Nullable private UUID webhookOauthId; @@ -172,27 +172,30 @@ public void setEnabled(@jakarta.annotation.Nullable Boolean enabled) { this.enabled = enabled; } - public CreateWebhookRequest mtls(@jakarta.annotation.Nullable WebhookMtls mtls) { - this.mtls = mtls; + public CreateWebhookRequest webhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; return this; } /** - * Get mtls + * The id of the mTLS configuration this webhook presents when delivering, from + * `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so + * replacing its certificate covers all of them at once. Send `null` to stop using + * mTLS for this webhook. * - * @return mtls + * @return webhookMtlsId */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_MTLS) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public WebhookMtls getMtls() { - return mtls; + public UUID getWebhookMtlsId() { + return webhookMtlsId; } - @JsonProperty(JSON_PROPERTY_MTLS) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMtls(@jakarta.annotation.Nullable WebhookMtls mtls) { - this.mtls = mtls; + public void setWebhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; } public CreateWebhookRequest webhookOauthId(@jakarta.annotation.Nullable UUID webhookOauthId) { @@ -282,14 +285,15 @@ public boolean equals(Object o) { && Objects.equals(this.description, createWebhookRequest.description) && Objects.equals(this.events, createWebhookRequest.events) && Objects.equals(this.enabled, createWebhookRequest.enabled) - && Objects.equals(this.mtls, createWebhookRequest.mtls) + && Objects.equals(this.webhookMtlsId, createWebhookRequest.webhookMtlsId) && Objects.equals(this.webhookOauthId, createWebhookRequest.webhookOauthId) && Objects.equals(this.customHeaders, createWebhookRequest.customHeaders); } @Override public int hashCode() { - return Objects.hash(url, description, events, enabled, mtls, webhookOauthId, customHeaders); + return Objects.hash( + url, description, events, enabled, webhookMtlsId, webhookOauthId, customHeaders); } @Override @@ -300,7 +304,7 @@ public String toString() { sb.append(" description: ").append(toIndentedString(description)).append("\n"); sb.append(" events: ").append(toIndentedString(events)).append("\n"); sb.append(" enabled: ").append(toIndentedString(enabled)).append("\n"); - sb.append(" mtls: ").append(toIndentedString(mtls)).append("\n"); + sb.append(" webhookMtlsId: ").append(toIndentedString(webhookMtlsId)).append("\n"); sb.append(" webhookOauthId: ").append(toIndentedString(webhookOauthId)).append("\n"); sb.append(" customHeaders: ").append(toIndentedString(customHeaders)).append("\n"); sb.append("}"); @@ -399,9 +403,14 @@ public String toUrlQueryString(String prefix) { ApiClient.urlEncode(ApiClient.valueToString(getEnabled())))); } - // add `mtls` to the URL query string - if (getMtls() != null) { - joiner.add(getMtls().toUrlQueryString(prefix + "mtls" + suffix)); + // add `webhookMtlsId` to the URL query string + if (getWebhookMtlsId() != null) { + joiner.add( + String.format( + "%swebhookMtlsId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getWebhookMtlsId())))); } // add `webhookOauthId` to the URL query string diff --git a/src/main/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponse.java b/src/main/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponse.java new file mode 100644 index 00000000..74eec692 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponse.java @@ -0,0 +1,503 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; +import java.util.UUID; + +/** + * The deleted mTLS configuration, plus the ids of any webhooks and OAuth credentials the delete + * detached from it. They are only detached by `forceDelete=true`; without it a + * delete is refused with `409` while anything still references the configuration. + */ +@JsonPropertyOrder({ + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_ID, + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_NAME, + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_SIGNED_CERT, + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_EXPIRES_AT, + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_CREATED_AT, + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_UPDATED_AT, + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_DETACHED_WEBHOOK_IDS, + DeleteWebhookMtlsConfigResponse.JSON_PROPERTY_DETACHED_WEBHOOK_OAUTH_IDS +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class DeleteWebhookMtlsConfigResponse { + public static final String JSON_PROPERTY_ID = "id"; + @jakarta.annotation.Nonnull private UUID id; + + public static final String JSON_PROPERTY_NAME = "name"; + @jakarta.annotation.Nullable private String name; + + public static final String JSON_PROPERTY_SIGNED_CERT = "signedCert"; + @jakarta.annotation.Nonnull private String signedCert; + + public static final String JSON_PROPERTY_EXPIRES_AT = "expiresAt"; + @jakarta.annotation.Nonnull private Long expiresAt; + + public static final String JSON_PROPERTY_CREATED_AT = "createdAt"; + @jakarta.annotation.Nonnull private Long createdAt; + + public static final String JSON_PROPERTY_UPDATED_AT = "updatedAt"; + @jakarta.annotation.Nonnull private Long updatedAt; + + public static final String JSON_PROPERTY_DETACHED_WEBHOOK_IDS = "detachedWebhookIds"; + @jakarta.annotation.Nonnull private List detachedWebhookIds; + + public static final String JSON_PROPERTY_DETACHED_WEBHOOK_OAUTH_IDS = "detachedWebhookOauthIds"; + @jakarta.annotation.Nonnull private List detachedWebhookOauthIds; + + public DeleteWebhookMtlsConfigResponse() {} + + @JsonCreator + public DeleteWebhookMtlsConfigResponse( + @JsonProperty(value = JSON_PROPERTY_ID, required = true) UUID id, + @JsonProperty(value = JSON_PROPERTY_SIGNED_CERT, required = true) String signedCert, + @JsonProperty(value = JSON_PROPERTY_EXPIRES_AT, required = true) Long expiresAt, + @JsonProperty(value = JSON_PROPERTY_CREATED_AT, required = true) Long createdAt, + @JsonProperty(value = JSON_PROPERTY_UPDATED_AT, required = true) Long updatedAt, + @JsonProperty(value = JSON_PROPERTY_DETACHED_WEBHOOK_IDS, required = true) + List detachedWebhookIds, + @JsonProperty(value = JSON_PROPERTY_DETACHED_WEBHOOK_OAUTH_IDS, required = true) + List detachedWebhookOauthIds) { + this.id = id; + this.signedCert = signedCert; + this.expiresAt = expiresAt; + this.createdAt = createdAt; + this.updatedAt = updatedAt; + this.detachedWebhookIds = detachedWebhookIds; + this.detachedWebhookOauthIds = detachedWebhookOauthIds; + } + + public DeleteWebhookMtlsConfigResponse id(@jakarta.annotation.Nonnull UUID id) { + this.id = id; + return this; + } + + /** + * The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a + * webhook or on OAuth credentials. + * + * @return id + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UUID getId() { + return id; + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setId(@jakarta.annotation.Nonnull UUID id) { + this.id = id; + } + + public DeleteWebhookMtlsConfigResponse name(@jakarta.annotation.Nullable String name) { + this.name = name; + return this; + } + + /** + * The label given to this mTLS configuration. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(@jakarta.annotation.Nullable String name) { + this.name = name; + } + + public DeleteWebhookMtlsConfigResponse signedCert( + @jakarta.annotation.Nonnull String signedCert) { + this.signedCert = signedCert; + return this; + } + + /** + * The signed client certificate PEM. + * + * @return signedCert + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getSignedCert() { + return signedCert; + } + + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSignedCert(@jakarta.annotation.Nonnull String signedCert) { + this.signedCert = signedCert; + } + + public DeleteWebhookMtlsConfigResponse expiresAt(@jakarta.annotation.Nonnull Long expiresAt) { + this.expiresAt = expiresAt; + return this; + } + + /** + * When the certificate itself expires, in milliseconds since the epoch. + * + * @return expiresAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Long getExpiresAt() { + return expiresAt; + } + + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setExpiresAt(@jakarta.annotation.Nonnull Long expiresAt) { + this.expiresAt = expiresAt; + } + + public DeleteWebhookMtlsConfigResponse createdAt(@jakarta.annotation.Nonnull Long createdAt) { + this.createdAt = createdAt; + return this; + } + + /** + * When the certificate was uploaded, in milliseconds since the epoch. + * + * @return createdAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Long getCreatedAt() { + return createdAt; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setCreatedAt(@jakarta.annotation.Nonnull Long createdAt) { + this.createdAt = createdAt; + } + + public DeleteWebhookMtlsConfigResponse updatedAt(@jakarta.annotation.Nonnull Long updatedAt) { + this.updatedAt = updatedAt; + return this; + } + + /** + * When this configuration was last changed, in milliseconds since the epoch. Differs from + * createdAt once the certificate has been replaced or the configuration renamed. + * + * @return updatedAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Long getUpdatedAt() { + return updatedAt; + } + + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setUpdatedAt(@jakarta.annotation.Nonnull Long updatedAt) { + this.updatedAt = updatedAt; + } + + public DeleteWebhookMtlsConfigResponse detachedWebhookIds( + @jakarta.annotation.Nonnull List detachedWebhookIds) { + this.detachedWebhookIds = detachedWebhookIds; + return this; + } + + public DeleteWebhookMtlsConfigResponse addDetachedWebhookIdsItem(UUID detachedWebhookIdsItem) { + if (this.detachedWebhookIds == null) { + this.detachedWebhookIds = new ArrayList<>(); + } + this.detachedWebhookIds.add(detachedWebhookIdsItem); + return this; + } + + /** + * Webhooks whose `webhookMtlsId` was cleared. The webhooks themselves are not deleted + * and keep delivering, just without a client certificate. Empty unless + * `forceDelete=true` detached something. + * + * @return detachedWebhookIds + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_DETACHED_WEBHOOK_IDS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getDetachedWebhookIds() { + return detachedWebhookIds; + } + + @JsonProperty(JSON_PROPERTY_DETACHED_WEBHOOK_IDS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setDetachedWebhookIds(@jakarta.annotation.Nonnull List detachedWebhookIds) { + this.detachedWebhookIds = detachedWebhookIds; + } + + public DeleteWebhookMtlsConfigResponse detachedWebhookOauthIds( + @jakarta.annotation.Nonnull List detachedWebhookOauthIds) { + this.detachedWebhookOauthIds = detachedWebhookOauthIds; + return this; + } + + public DeleteWebhookMtlsConfigResponse addDetachedWebhookOauthIdsItem( + UUID detachedWebhookOauthIdsItem) { + if (this.detachedWebhookOauthIds == null) { + this.detachedWebhookOauthIds = new ArrayList<>(); + } + this.detachedWebhookOauthIds.add(detachedWebhookOauthIdsItem); + return this; + } + + /** + * OAuth credentials whose `webhookMtlsId` was cleared. Their token requests continue + * without a client certificate. Empty unless `forceDelete=true` detached + * something. + * + * @return detachedWebhookOauthIds + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_DETACHED_WEBHOOK_OAUTH_IDS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getDetachedWebhookOauthIds() { + return detachedWebhookOauthIds; + } + + @JsonProperty(JSON_PROPERTY_DETACHED_WEBHOOK_OAUTH_IDS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setDetachedWebhookOauthIds( + @jakarta.annotation.Nonnull List detachedWebhookOauthIds) { + this.detachedWebhookOauthIds = detachedWebhookOauthIds; + } + + /** Return true if this DeleteWebhookMtlsConfigResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DeleteWebhookMtlsConfigResponse deleteWebhookMtlsConfigResponse = + (DeleteWebhookMtlsConfigResponse) o; + return Objects.equals(this.id, deleteWebhookMtlsConfigResponse.id) + && Objects.equals(this.name, deleteWebhookMtlsConfigResponse.name) + && Objects.equals(this.signedCert, deleteWebhookMtlsConfigResponse.signedCert) + && Objects.equals(this.expiresAt, deleteWebhookMtlsConfigResponse.expiresAt) + && Objects.equals(this.createdAt, deleteWebhookMtlsConfigResponse.createdAt) + && Objects.equals(this.updatedAt, deleteWebhookMtlsConfigResponse.updatedAt) + && Objects.equals( + this.detachedWebhookIds, deleteWebhookMtlsConfigResponse.detachedWebhookIds) + && Objects.equals( + this.detachedWebhookOauthIds, + deleteWebhookMtlsConfigResponse.detachedWebhookOauthIds); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + name, + signedCert, + expiresAt, + createdAt, + updatedAt, + detachedWebhookIds, + detachedWebhookOauthIds); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DeleteWebhookMtlsConfigResponse {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" signedCert: ").append(toIndentedString(signedCert)).append("\n"); + sb.append(" expiresAt: ").append(toIndentedString(expiresAt)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); + sb.append(" detachedWebhookIds: ") + .append(toIndentedString(detachedWebhookIds)) + .append("\n"); + sb.append(" detachedWebhookOauthIds: ") + .append(toIndentedString(detachedWebhookOauthIds)) + .append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add( + String.format( + "%sid%s=%s", + prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add( + String.format( + "%sname%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `signedCert` to the URL query string + if (getSignedCert() != null) { + joiner.add( + String.format( + "%ssignedCert%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getSignedCert())))); + } + + // add `expiresAt` to the URL query string + if (getExpiresAt() != null) { + joiner.add( + String.format( + "%sexpiresAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExpiresAt())))); + } + + // add `createdAt` to the URL query string + if (getCreatedAt() != null) { + joiner.add( + String.format( + "%screatedAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getCreatedAt())))); + } + + // add `updatedAt` to the URL query string + if (getUpdatedAt() != null) { + joiner.add( + String.format( + "%supdatedAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getUpdatedAt())))); + } + + // add `detachedWebhookIds` to the URL query string + if (getDetachedWebhookIds() != null) { + for (int i = 0; i < getDetachedWebhookIds().size(); i++) { + if (getDetachedWebhookIds().get(i) != null) { + joiner.add( + String.format( + "%sdetachedWebhookIds%s%s=%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format( + "%s%d%s", containerPrefix, i, containerSuffix), + ApiClient.urlEncode( + ApiClient.valueToString( + getDetachedWebhookIds().get(i))))); + } + } + } + + // add `detachedWebhookOauthIds` to the URL query string + if (getDetachedWebhookOauthIds() != null) { + for (int i = 0; i < getDetachedWebhookOauthIds().size(); i++) { + if (getDetachedWebhookOauthIds().get(i) != null) { + joiner.add( + String.format( + "%sdetachedWebhookOauthIds%s%s=%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format( + "%s%d%s", containerPrefix, i, containerSuffix), + ApiClient.urlEncode( + ApiClient.valueToString( + getDetachedWebhookOauthIds().get(i))))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponse.java b/src/main/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponse.java index 3506aa56..c488de74 100644 --- a/src/main/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponse.java +++ b/src/main/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponse.java @@ -38,7 +38,7 @@ DeleteWebhookOauthResponse.JSON_PROPERTY_CUSTOM_JWT_CLAIMS, DeleteWebhookOauthResponse.JSON_PROPERTY_CUSTOM_BODY_PARAMS, DeleteWebhookOauthResponse.JSON_PROPERTY_CUSTOM_HEADERS, - DeleteWebhookOauthResponse.JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT, + DeleteWebhookOauthResponse.JSON_PROPERTY_WEBHOOK_MTLS_ID, DeleteWebhookOauthResponse.JSON_PROPERTY_CREATED_AT, DeleteWebhookOauthResponse.JSON_PROPERTY_UPDATED_AT, DeleteWebhookOauthResponse.JSON_PROPERTY_DETACHED_WEBHOOK_IDS @@ -71,8 +71,8 @@ public class DeleteWebhookOauthResponse { public static final String JSON_PROPERTY_CUSTOM_HEADERS = "customHeaders"; @jakarta.annotation.Nullable private List customHeaders; - public static final String JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT = "mtlsClientSignedCert"; - @jakarta.annotation.Nullable private String mtlsClientSignedCert; + public static final String JSON_PROPERTY_WEBHOOK_MTLS_ID = "webhookMtlsId"; + @jakarta.annotation.Nullable private UUID webhookMtlsId; public static final String JSON_PROPERTY_CREATED_AT = "createdAt"; @jakarta.annotation.Nonnull private Long createdAt; @@ -326,28 +326,30 @@ public void setCustomHeaders(@jakarta.annotation.Nullable List customHea this.customHeaders = customHeaders; } - public DeleteWebhookOauthResponse mtlsClientSignedCert( - @jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public DeleteWebhookOauthResponse webhookMtlsId( + @jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; return this; } /** - * PEM-encoded client certificate used for mTLS when fetching OAuth tokens. + * The id of the mTLS configuration presented to the token endpoint. Absent when the token + * request does not use mTLS. Read the certificate from + * `/v1/webhooks_settings/mtls/{id}`. * - * @return mtlsClientSignedCert + * @return webhookMtlsId */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public String getMtlsClientSignedCert() { - return mtlsClientSignedCert; + public UUID getWebhookMtlsId() { + return webhookMtlsId; } - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMtlsClientSignedCert(@jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public void setWebhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; } public DeleteWebhookOauthResponse createdAt(@jakarta.annotation.Nonnull Long createdAt) { @@ -449,8 +451,7 @@ public boolean equals(Object o) { && Objects.equals( this.customBodyParams, deleteWebhookOauthResponse.customBodyParams) && Objects.equals(this.customHeaders, deleteWebhookOauthResponse.customHeaders) - && Objects.equals( - this.mtlsClientSignedCert, deleteWebhookOauthResponse.mtlsClientSignedCert) + && Objects.equals(this.webhookMtlsId, deleteWebhookOauthResponse.webhookMtlsId) && Objects.equals(this.createdAt, deleteWebhookOauthResponse.createdAt) && Objects.equals(this.updatedAt, deleteWebhookOauthResponse.updatedAt) && Objects.equals( @@ -468,7 +469,7 @@ public int hashCode() { customJwtClaims, customBodyParams, customHeaders, - mtlsClientSignedCert, + webhookMtlsId, createdAt, updatedAt, detachedWebhookIds); @@ -486,9 +487,7 @@ public String toString() { sb.append(" customJwtClaims: ").append(toIndentedString(customJwtClaims)).append("\n"); sb.append(" customBodyParams: ").append(toIndentedString(customBodyParams)).append("\n"); sb.append(" customHeaders: ").append(toIndentedString(customHeaders)).append("\n"); - sb.append(" mtlsClientSignedCert: ") - .append(toIndentedString(mtlsClientSignedCert)) - .append("\n"); + sb.append(" webhookMtlsId: ").append(toIndentedString(webhookMtlsId)).append("\n"); sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); sb.append(" detachedWebhookIds: ") @@ -640,15 +639,14 @@ public String toUrlQueryString(String prefix) { } } - // add `mtlsClientSignedCert` to the URL query string - if (getMtlsClientSignedCert() != null) { + // add `webhookMtlsId` to the URL query string + if (getWebhookMtlsId() != null) { joiner.add( String.format( - "%smtlsClientSignedCert%s=%s", + "%swebhookMtlsId%s=%s", prefix, suffix, - ApiClient.urlEncode( - ApiClient.valueToString(getMtlsClientSignedCert())))); + ApiClient.urlEncode(ApiClient.valueToString(getWebhookMtlsId())))); } // add `createdAt` to the URL query string diff --git a/src/main/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfig.java b/src/main/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfig.java new file mode 100644 index 00000000..d3d398b2 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfig.java @@ -0,0 +1,194 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** EffectiveUtxoSelectionConfig */ +@JsonPropertyOrder({ + EffectiveUtxoSelectionConfig.JSON_PROPERTY_STRATEGY, + EffectiveUtxoSelectionConfig.JSON_PROPERTY_SOURCE +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class EffectiveUtxoSelectionConfig { + public static final String JSON_PROPERTY_STRATEGY = "strategy"; + @jakarta.annotation.Nonnull private UtxoSelectionStrategyEnum strategy; + + public static final String JSON_PROPERTY_SOURCE = "source"; + @jakarta.annotation.Nonnull private UtxoSelectionConfigSourceEnum source; + + public EffectiveUtxoSelectionConfig() {} + + @JsonCreator + public EffectiveUtxoSelectionConfig( + @JsonProperty(value = JSON_PROPERTY_STRATEGY, required = true) + UtxoSelectionStrategyEnum strategy, + @JsonProperty(value = JSON_PROPERTY_SOURCE, required = true) + UtxoSelectionConfigSourceEnum source) { + this.strategy = strategy; + this.source = source; + } + + public EffectiveUtxoSelectionConfig strategy( + @jakarta.annotation.Nonnull UtxoSelectionStrategyEnum strategy) { + this.strategy = strategy; + return this; + } + + /** + * Get strategy + * + * @return strategy + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_STRATEGY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UtxoSelectionStrategyEnum getStrategy() { + return strategy; + } + + @JsonProperty(JSON_PROPERTY_STRATEGY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setStrategy(@jakarta.annotation.Nonnull UtxoSelectionStrategyEnum strategy) { + this.strategy = strategy; + } + + public EffectiveUtxoSelectionConfig source( + @jakarta.annotation.Nonnull UtxoSelectionConfigSourceEnum source) { + this.source = source; + return this; + } + + /** + * Get source + * + * @return source + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_SOURCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UtxoSelectionConfigSourceEnum getSource() { + return source; + } + + @JsonProperty(JSON_PROPERTY_SOURCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSource(@jakarta.annotation.Nonnull UtxoSelectionConfigSourceEnum source) { + this.source = source; + } + + /** Return true if this EffectiveUtxoSelectionConfig object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + EffectiveUtxoSelectionConfig effectiveUtxoSelectionConfig = + (EffectiveUtxoSelectionConfig) o; + return Objects.equals(this.strategy, effectiveUtxoSelectionConfig.strategy) + && Objects.equals(this.source, effectiveUtxoSelectionConfig.source); + } + + @Override + public int hashCode() { + return Objects.hash(strategy, source); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class EffectiveUtxoSelectionConfig {\n"); + sb.append(" strategy: ").append(toIndentedString(strategy)).append("\n"); + sb.append(" source: ").append(toIndentedString(source)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `strategy` to the URL query string + if (getStrategy() != null) { + joiner.add( + String.format( + "%sstrategy%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getStrategy())))); + } + + // add `source` to the URL query string + if (getSource() != null) { + joiner.add( + String.format( + "%ssource%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getSource())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetails.java b/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetails.java index c39716d8..278c1def 100644 --- a/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetails.java +++ b/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetails.java @@ -80,6 +80,57 @@ public ExecutionRequestDetails deserialize(JsonParser jp, DeserializationContext boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); int match = 0; JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize LimitExecutionRequestDetails + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LimitExecutionRequestDetails.class.equals(Integer.class) + || LimitExecutionRequestDetails.class.equals(Long.class) + || LimitExecutionRequestDetails.class.equals(Float.class) + || LimitExecutionRequestDetails.class.equals(Double.class) + || LimitExecutionRequestDetails.class.equals(Boolean.class) + || LimitExecutionRequestDetails.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LimitExecutionRequestDetails.class.equals(Integer.class) + || LimitExecutionRequestDetails.class.equals( + Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LimitExecutionRequestDetails.class.equals(Float.class) + || LimitExecutionRequestDetails.class.equals( + Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (LimitExecutionRequestDetails.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE + || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LimitExecutionRequestDetails.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()) + .readValueAs(LimitExecutionRequestDetails.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log( + Level.FINER, + "Input data matches schema 'LimitExecutionRequestDetails'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'LimitExecutionRequestDetails'", + e); + } + // deserialize MarketExecutionRequestDetails try { boolean attemptParsing = true; @@ -212,6 +263,11 @@ public ExecutionRequestDetails() { super("oneOf", Boolean.FALSE); } + public ExecutionRequestDetails(LimitExecutionRequestDetails o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public ExecutionRequestDetails(MarketExecutionRequestDetails o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -223,6 +279,7 @@ public ExecutionRequestDetails(QuoteExecutionWithRequoteRequestDetails o) { } static { + schemas.put("LimitExecutionRequestDetails", LimitExecutionRequestDetails.class); schemas.put("MarketExecutionRequestDetails", MarketExecutionRequestDetails.class); schemas.put( "QuoteExecutionWithRequoteRequestDetails", @@ -231,8 +288,10 @@ public ExecutionRequestDetails(QuoteExecutionWithRequoteRequestDetails o) { ExecutionRequestDetails.class, Collections.unmodifiableMap(schemas)); // Initialize and register the discriminator mappings. Map> mappings = new HashMap>(); + mappings.put("LIMIT", LimitExecutionRequestDetails.class); mappings.put("MARKET", MarketExecutionRequestDetails.class); mappings.put("QUOTE", QuoteExecutionWithRequoteRequestDetails.class); + mappings.put("LimitExecutionRequestDetails", LimitExecutionRequestDetails.class); mappings.put("MarketExecutionRequestDetails", MarketExecutionRequestDetails.class); mappings.put( "QuoteExecutionWithRequoteRequestDetails", @@ -248,7 +307,7 @@ public Map> getSchemas() { /** * Set the instance that matches the oneOf child schema, check the instance parameter is valid - * against the oneOf child schemas: MarketExecutionRequestDetails, + * against the oneOf child schemas: LimitExecutionRequestDetails, MarketExecutionRequestDetails, * QuoteExecutionWithRequoteRequestDetails * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be @@ -256,6 +315,12 @@ public Map> getSchemas() { */ @Override public void setActualInstance(Object instance) { + if (JSON.isInstanceOf( + LimitExecutionRequestDetails.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf( MarketExecutionRequestDetails.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -269,15 +334,15 @@ public void setActualInstance(Object instance) { } throw new RuntimeException( - "Invalid instance type. Must be MarketExecutionRequestDetails," - + " QuoteExecutionWithRequoteRequestDetails"); + "Invalid instance type. Must be LimitExecutionRequestDetails," + + " MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails"); } /** - * Get the actual instance, which can be the following: MarketExecutionRequestDetails, - * QuoteExecutionWithRequoteRequestDetails + * Get the actual instance, which can be the following: LimitExecutionRequestDetails, + * MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails * - * @return The actual instance (MarketExecutionRequestDetails, + * @return The actual instance (LimitExecutionRequestDetails, MarketExecutionRequestDetails, * QuoteExecutionWithRequoteRequestDetails) */ @Override @@ -285,6 +350,18 @@ public Object getActualInstance() { return super.getActualInstance(); } + /** + * Get the actual instance of `LimitExecutionRequestDetails`. If the actual instance is not + * `LimitExecutionRequestDetails`, the ClassCastException will be thrown. + * + * @return The actual instance of `LimitExecutionRequestDetails` + * @throws ClassCastException if the instance is not `LimitExecutionRequestDetails` + */ + public LimitExecutionRequestDetails getLimitExecutionRequestDetails() + throws ClassCastException { + return (LimitExecutionRequestDetails) super.getActualInstance(); + } + /** * Get the actual instance of `MarketExecutionRequestDetails`. If the actual instance is not * `MarketExecutionRequestDetails`, the ClassCastException will be thrown. @@ -357,6 +434,14 @@ public String toUrlQueryString(String prefix) { } return joiner.toString(); } + if (getActualInstance() instanceof LimitExecutionRequestDetails) { + if (getActualInstance() != null) { + joiner.add( + ((LimitExecutionRequestDetails) getActualInstance()) + .toUrlQueryString(prefix + "one_of_2" + suffix)); + } + return joiner.toString(); + } return null; } } diff --git a/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetailsType.java b/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetailsType.java index c013f7e6..0bb44b33 100644 --- a/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetailsType.java +++ b/src/main/java/com/fireblocks/sdk/model/ExecutionRequestDetailsType.java @@ -20,7 +20,9 @@ public enum ExecutionRequestDetailsType { QUOTE("QUOTE"), - MARKET("MARKET"); + MARKET("MARKET"), + + LIMIT("LIMIT"); private String value; diff --git a/src/main/java/com/fireblocks/sdk/model/ExecutionResponseDetails.java b/src/main/java/com/fireblocks/sdk/model/ExecutionResponseDetails.java index bdde60de..b42f1cbf 100644 --- a/src/main/java/com/fireblocks/sdk/model/ExecutionResponseDetails.java +++ b/src/main/java/com/fireblocks/sdk/model/ExecutionResponseDetails.java @@ -80,6 +80,57 @@ public ExecutionResponseDetails deserialize(JsonParser jp, DeserializationContex boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); int match = 0; JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize LimitExecutionResponseDetails + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LimitExecutionResponseDetails.class.equals(Integer.class) + || LimitExecutionResponseDetails.class.equals(Long.class) + || LimitExecutionResponseDetails.class.equals(Float.class) + || LimitExecutionResponseDetails.class.equals(Double.class) + || LimitExecutionResponseDetails.class.equals(Boolean.class) + || LimitExecutionResponseDetails.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LimitExecutionResponseDetails.class.equals(Integer.class) + || LimitExecutionResponseDetails.class.equals( + Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LimitExecutionResponseDetails.class.equals(Float.class) + || LimitExecutionResponseDetails.class.equals( + Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (LimitExecutionResponseDetails.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE + || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LimitExecutionResponseDetails.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()) + .readValueAs(LimitExecutionResponseDetails.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log( + Level.FINER, + "Input data matches schema 'LimitExecutionResponseDetails'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'LimitExecutionResponseDetails'", + e); + } + // deserialize MarketExecutionResponseDetails try { boolean attemptParsing = true; @@ -213,6 +264,11 @@ public ExecutionResponseDetails() { super("oneOf", Boolean.FALSE); } + public ExecutionResponseDetails(LimitExecutionResponseDetails o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public ExecutionResponseDetails(MarketExecutionResponseDetails o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -224,6 +280,7 @@ public ExecutionResponseDetails(QuoteExecutionWithRequoteResponseDetails o) { } static { + schemas.put("LimitExecutionResponseDetails", LimitExecutionResponseDetails.class); schemas.put("MarketExecutionResponseDetails", MarketExecutionResponseDetails.class); schemas.put( "QuoteExecutionWithRequoteResponseDetails", @@ -232,8 +289,10 @@ public ExecutionResponseDetails(QuoteExecutionWithRequoteResponseDetails o) { ExecutionResponseDetails.class, Collections.unmodifiableMap(schemas)); // Initialize and register the discriminator mappings. Map> mappings = new HashMap>(); + mappings.put("LIMIT", LimitExecutionResponseDetails.class); mappings.put("MARKET", MarketExecutionResponseDetails.class); mappings.put("QUOTE", QuoteExecutionWithRequoteResponseDetails.class); + mappings.put("LimitExecutionResponseDetails", LimitExecutionResponseDetails.class); mappings.put("MarketExecutionResponseDetails", MarketExecutionResponseDetails.class); mappings.put( "QuoteExecutionWithRequoteResponseDetails", @@ -249,14 +308,20 @@ public Map> getSchemas() { /** * Set the instance that matches the oneOf child schema, check the instance parameter is valid - * against the oneOf child schemas: MarketExecutionResponseDetails, - * QuoteExecutionWithRequoteResponseDetails + * against the oneOf child schemas: LimitExecutionResponseDetails, + * MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be * a composed schema (allOf, anyOf, oneOf). */ @Override public void setActualInstance(Object instance) { + if (JSON.isInstanceOf( + LimitExecutionResponseDetails.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf( MarketExecutionResponseDetails.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -272,15 +337,15 @@ public void setActualInstance(Object instance) { } throw new RuntimeException( - "Invalid instance type. Must be MarketExecutionResponseDetails," - + " QuoteExecutionWithRequoteResponseDetails"); + "Invalid instance type. Must be LimitExecutionResponseDetails," + + " MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails"); } /** - * Get the actual instance, which can be the following: MarketExecutionResponseDetails, - * QuoteExecutionWithRequoteResponseDetails + * Get the actual instance, which can be the following: LimitExecutionResponseDetails, + * MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails * - * @return The actual instance (MarketExecutionResponseDetails, + * @return The actual instance (LimitExecutionResponseDetails, MarketExecutionResponseDetails, * QuoteExecutionWithRequoteResponseDetails) */ @Override @@ -288,6 +353,18 @@ public Object getActualInstance() { return super.getActualInstance(); } + /** + * Get the actual instance of `LimitExecutionResponseDetails`. If the actual instance is not + * `LimitExecutionResponseDetails`, the ClassCastException will be thrown. + * + * @return The actual instance of `LimitExecutionResponseDetails` + * @throws ClassCastException if the instance is not `LimitExecutionResponseDetails` + */ + public LimitExecutionResponseDetails getLimitExecutionResponseDetails() + throws ClassCastException { + return (LimitExecutionResponseDetails) super.getActualInstance(); + } + /** * Get the actual instance of `MarketExecutionResponseDetails`. If the actual instance is not * `MarketExecutionResponseDetails`, the ClassCastException will be thrown. @@ -360,6 +437,14 @@ public String toUrlQueryString(String prefix) { } return joiner.toString(); } + if (getActualInstance() instanceof LimitExecutionResponseDetails) { + if (getActualInstance() != null) { + joiner.add( + ((LimitExecutionResponseDetails) getActualInstance()) + .toUrlQueryString(prefix + "one_of_2" + suffix)); + } + return joiner.toString(); + } return null; } } diff --git a/src/main/java/com/fireblocks/sdk/model/FailureReason.java b/src/main/java/com/fireblocks/sdk/model/FailureReason.java index 8f2afa16..3bc809de 100644 --- a/src/main/java/com/fireblocks/sdk/model/FailureReason.java +++ b/src/main/java/com/fireblocks/sdk/model/FailureReason.java @@ -74,7 +74,17 @@ public enum FailureReason { MISSING_DESTINATION_DETAILS("MISSING_DESTINATION_DETAILS"), - MISSING_WORKSPACE_DETAILS("MISSING_WORKSPACE_DETAILS"); + MISSING_WORKSPACE_DETAILS("MISSING_WORKSPACE_DETAILS"), + + CREDIT_LIMIT_EXCEEDED("CREDIT_LIMIT_EXCEEDED"), + + QUOTE_EXPIRED("QUOTE_EXPIRED"), + + DESK_REJECTED("DESK_REJECTED"), + + REQUOTE_WORSE_PRICE("REQUOTE_WORSE_PRICE"), + + FOK_KILLED("FOK_KILLED"); private String value; diff --git a/src/main/java/com/fireblocks/sdk/model/FokTimeInForce.java b/src/main/java/com/fireblocks/sdk/model/FokTimeInForce.java new file mode 100644 index 00000000..65efa6af --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/FokTimeInForce.java @@ -0,0 +1,180 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Fill-or-kill - the order must be filled in full at the limit price immediately, or not at all. + */ +@JsonPropertyOrder({FokTimeInForce.JSON_PROPERTY_TYPE}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class FokTimeInForce { + /** Discriminator for the fill-or-kill time-in-force type. */ + public enum TypeEnum { + FOK(String.valueOf("FOK")); + + private String value; + + TypeEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static TypeEnum fromValue(String value) { + for (TypeEnum b : TypeEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_TYPE = "type"; + @jakarta.annotation.Nonnull private TypeEnum type; + + public FokTimeInForce() {} + + @JsonCreator + public FokTimeInForce( + @JsonProperty(value = JSON_PROPERTY_TYPE, required = true) TypeEnum type) { + this.type = type; + } + + public FokTimeInForce type(@jakarta.annotation.Nonnull TypeEnum type) { + this.type = type; + return this; + } + + /** + * Discriminator for the fill-or-kill time-in-force type. + * + * @return type + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public TypeEnum getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(@jakarta.annotation.Nonnull TypeEnum type) { + this.type = type; + } + + /** Return true if this FokTimeInForce object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FokTimeInForce fokTimeInForce = (FokTimeInForce) o; + return Objects.equals(this.type, fokTimeInForce.type); + } + + @Override + public int hashCode() { + return Objects.hash(type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FokTimeInForce {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add( + String.format( + "%stype%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/LimitExecutionRequestDetails.java b/src/main/java/com/fireblocks/sdk/model/LimitExecutionRequestDetails.java new file mode 100644 index 00000000..6ae831ad --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/LimitExecutionRequestDetails.java @@ -0,0 +1,484 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** LimitExecutionRequestDetails */ +@JsonPropertyOrder({ + LimitExecutionRequestDetails.JSON_PROPERTY_TYPE, + LimitExecutionRequestDetails.JSON_PROPERTY_PRICE, + LimitExecutionRequestDetails.JSON_PROPERTY_TIME_IN_FORCE, + LimitExecutionRequestDetails.JSON_PROPERTY_SIDE, + LimitExecutionRequestDetails.JSON_PROPERTY_BASE_AMOUNT, + LimitExecutionRequestDetails.JSON_PROPERTY_BASE_ASSET_ID, + LimitExecutionRequestDetails.JSON_PROPERTY_BASE_ASSET_RAIL, + LimitExecutionRequestDetails.JSON_PROPERTY_QUOTE_ASSET_ID, + LimitExecutionRequestDetails.JSON_PROPERTY_QUOTE_ASSET_RAIL +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class LimitExecutionRequestDetails { + public static final String JSON_PROPERTY_TYPE = "type"; + @jakarta.annotation.Nonnull private LimitTypeEnum type; + + public static final String JSON_PROPERTY_PRICE = "price"; + @jakarta.annotation.Nonnull private String price; + + public static final String JSON_PROPERTY_TIME_IN_FORCE = "timeInForce"; + @jakarta.annotation.Nonnull private FokTimeInForce timeInForce; + + public static final String JSON_PROPERTY_SIDE = "side"; + @jakarta.annotation.Nonnull private Side side; + + public static final String JSON_PROPERTY_BASE_AMOUNT = "baseAmount"; + @jakarta.annotation.Nonnull private String baseAmount; + + public static final String JSON_PROPERTY_BASE_ASSET_ID = "baseAssetId"; + @jakarta.annotation.Nonnull private String baseAssetId; + + public static final String JSON_PROPERTY_BASE_ASSET_RAIL = "baseAssetRail"; + @jakarta.annotation.Nullable private TransferRail baseAssetRail; + + public static final String JSON_PROPERTY_QUOTE_ASSET_ID = "quoteAssetId"; + @jakarta.annotation.Nonnull private String quoteAssetId; + + public static final String JSON_PROPERTY_QUOTE_ASSET_RAIL = "quoteAssetRail"; + @jakarta.annotation.Nullable private TransferRail quoteAssetRail; + + public LimitExecutionRequestDetails() {} + + @JsonCreator + public LimitExecutionRequestDetails( + @JsonProperty(value = JSON_PROPERTY_TYPE, required = true) LimitTypeEnum type, + @JsonProperty(value = JSON_PROPERTY_PRICE, required = true) String price, + @JsonProperty(value = JSON_PROPERTY_TIME_IN_FORCE, required = true) + FokTimeInForce timeInForce, + @JsonProperty(value = JSON_PROPERTY_SIDE, required = true) Side side, + @JsonProperty(value = JSON_PROPERTY_BASE_AMOUNT, required = true) String baseAmount, + @JsonProperty(value = JSON_PROPERTY_BASE_ASSET_ID, required = true) String baseAssetId, + @JsonProperty(value = JSON_PROPERTY_QUOTE_ASSET_ID, required = true) + String quoteAssetId) { + this.type = type; + this.price = price; + this.timeInForce = timeInForce; + this.side = side; + this.baseAmount = baseAmount; + this.baseAssetId = baseAssetId; + this.quoteAssetId = quoteAssetId; + } + + public LimitExecutionRequestDetails type(@jakarta.annotation.Nonnull LimitTypeEnum type) { + this.type = type; + return this; + } + + /** + * Get type + * + * @return type + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LimitTypeEnum getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(@jakarta.annotation.Nonnull LimitTypeEnum type) { + this.type = type; + } + + public LimitExecutionRequestDetails price(@jakarta.annotation.Nonnull String price) { + this.price = price; + return this; + } + + /** + * Limit price for the order + * + * @return price + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_PRICE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getPrice() { + return price; + } + + @JsonProperty(JSON_PROPERTY_PRICE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setPrice(@jakarta.annotation.Nonnull String price) { + this.price = price; + } + + public LimitExecutionRequestDetails timeInForce( + @jakarta.annotation.Nonnull FokTimeInForce timeInForce) { + this.timeInForce = timeInForce; + return this; + } + + /** + * Get timeInForce + * + * @return timeInForce + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TIME_IN_FORCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public FokTimeInForce getTimeInForce() { + return timeInForce; + } + + @JsonProperty(JSON_PROPERTY_TIME_IN_FORCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTimeInForce(@jakarta.annotation.Nonnull FokTimeInForce timeInForce) { + this.timeInForce = timeInForce; + } + + public LimitExecutionRequestDetails side(@jakarta.annotation.Nonnull Side side) { + this.side = side; + return this; + } + + /** + * Get side + * + * @return side + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_SIDE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Side getSide() { + return side; + } + + @JsonProperty(JSON_PROPERTY_SIDE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSide(@jakarta.annotation.Nonnull Side side) { + this.side = side; + } + + public LimitExecutionRequestDetails baseAmount(@jakarta.annotation.Nonnull String baseAmount) { + this.baseAmount = baseAmount; + return this; + } + + /** + * Amount in baseAssetId. BUY = base amount to receive; SELL = base amount to sell. + * + * @return baseAmount + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_BASE_AMOUNT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getBaseAmount() { + return baseAmount; + } + + @JsonProperty(JSON_PROPERTY_BASE_AMOUNT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setBaseAmount(@jakarta.annotation.Nonnull String baseAmount) { + this.baseAmount = baseAmount; + } + + public LimitExecutionRequestDetails baseAssetId( + @jakarta.annotation.Nonnull String baseAssetId) { + this.baseAssetId = baseAssetId; + return this; + } + + /** + * The asset you receive on BUY / give on SELL. + * + * @return baseAssetId + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_BASE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getBaseAssetId() { + return baseAssetId; + } + + @JsonProperty(JSON_PROPERTY_BASE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setBaseAssetId(@jakarta.annotation.Nonnull String baseAssetId) { + this.baseAssetId = baseAssetId; + } + + public LimitExecutionRequestDetails baseAssetRail( + @jakarta.annotation.Nullable TransferRail baseAssetRail) { + this.baseAssetRail = baseAssetRail; + return this; + } + + /** + * Get baseAssetRail + * + * @return baseAssetRail + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_BASE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TransferRail getBaseAssetRail() { + return baseAssetRail; + } + + @JsonProperty(JSON_PROPERTY_BASE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBaseAssetRail(@jakarta.annotation.Nullable TransferRail baseAssetRail) { + this.baseAssetRail = baseAssetRail; + } + + public LimitExecutionRequestDetails quoteAssetId( + @jakarta.annotation.Nonnull String quoteAssetId) { + this.quoteAssetId = quoteAssetId; + return this; + } + + /** + * Counter asset used to pay/receive + * + * @return quoteAssetId + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getQuoteAssetId() { + return quoteAssetId; + } + + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setQuoteAssetId(@jakarta.annotation.Nonnull String quoteAssetId) { + this.quoteAssetId = quoteAssetId; + } + + public LimitExecutionRequestDetails quoteAssetRail( + @jakarta.annotation.Nullable TransferRail quoteAssetRail) { + this.quoteAssetRail = quoteAssetRail; + return this; + } + + /** + * Get quoteAssetRail + * + * @return quoteAssetRail + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TransferRail getQuoteAssetRail() { + return quoteAssetRail; + } + + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setQuoteAssetRail(@jakarta.annotation.Nullable TransferRail quoteAssetRail) { + this.quoteAssetRail = quoteAssetRail; + } + + /** Return true if this LimitExecutionRequestDetails object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LimitExecutionRequestDetails limitExecutionRequestDetails = + (LimitExecutionRequestDetails) o; + return Objects.equals(this.type, limitExecutionRequestDetails.type) + && Objects.equals(this.price, limitExecutionRequestDetails.price) + && Objects.equals(this.timeInForce, limitExecutionRequestDetails.timeInForce) + && Objects.equals(this.side, limitExecutionRequestDetails.side) + && Objects.equals(this.baseAmount, limitExecutionRequestDetails.baseAmount) + && Objects.equals(this.baseAssetId, limitExecutionRequestDetails.baseAssetId) + && Objects.equals(this.baseAssetRail, limitExecutionRequestDetails.baseAssetRail) + && Objects.equals(this.quoteAssetId, limitExecutionRequestDetails.quoteAssetId) + && Objects.equals(this.quoteAssetRail, limitExecutionRequestDetails.quoteAssetRail); + } + + @Override + public int hashCode() { + return Objects.hash( + type, + price, + timeInForce, + side, + baseAmount, + baseAssetId, + baseAssetRail, + quoteAssetId, + quoteAssetRail); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LimitExecutionRequestDetails {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" price: ").append(toIndentedString(price)).append("\n"); + sb.append(" timeInForce: ").append(toIndentedString(timeInForce)).append("\n"); + sb.append(" side: ").append(toIndentedString(side)).append("\n"); + sb.append(" baseAmount: ").append(toIndentedString(baseAmount)).append("\n"); + sb.append(" baseAssetId: ").append(toIndentedString(baseAssetId)).append("\n"); + sb.append(" baseAssetRail: ").append(toIndentedString(baseAssetRail)).append("\n"); + sb.append(" quoteAssetId: ").append(toIndentedString(quoteAssetId)).append("\n"); + sb.append(" quoteAssetRail: ").append(toIndentedString(quoteAssetRail)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add( + String.format( + "%stype%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `price` to the URL query string + if (getPrice() != null) { + joiner.add( + String.format( + "%sprice%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getPrice())))); + } + + // add `timeInForce` to the URL query string + if (getTimeInForce() != null) { + joiner.add(getTimeInForce().toUrlQueryString(prefix + "timeInForce" + suffix)); + } + + // add `side` to the URL query string + if (getSide() != null) { + joiner.add( + String.format( + "%sside%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getSide())))); + } + + // add `baseAmount` to the URL query string + if (getBaseAmount() != null) { + joiner.add( + String.format( + "%sbaseAmount%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getBaseAmount())))); + } + + // add `baseAssetId` to the URL query string + if (getBaseAssetId() != null) { + joiner.add( + String.format( + "%sbaseAssetId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getBaseAssetId())))); + } + + // add `baseAssetRail` to the URL query string + if (getBaseAssetRail() != null) { + joiner.add( + String.format( + "%sbaseAssetRail%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getBaseAssetRail())))); + } + + // add `quoteAssetId` to the URL query string + if (getQuoteAssetId() != null) { + joiner.add( + String.format( + "%squoteAssetId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getQuoteAssetId())))); + } + + // add `quoteAssetRail` to the URL query string + if (getQuoteAssetRail() != null) { + joiner.add( + String.format( + "%squoteAssetRail%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getQuoteAssetRail())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/LimitExecutionResponseDetails.java b/src/main/java/com/fireblocks/sdk/model/LimitExecutionResponseDetails.java new file mode 100644 index 00000000..cee801cb --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/LimitExecutionResponseDetails.java @@ -0,0 +1,485 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** LimitExecutionResponseDetails */ +@JsonPropertyOrder({ + LimitExecutionResponseDetails.JSON_PROPERTY_TYPE, + LimitExecutionResponseDetails.JSON_PROPERTY_PRICE, + LimitExecutionResponseDetails.JSON_PROPERTY_TIME_IN_FORCE, + LimitExecutionResponseDetails.JSON_PROPERTY_SIDE, + LimitExecutionResponseDetails.JSON_PROPERTY_BASE_AMOUNT, + LimitExecutionResponseDetails.JSON_PROPERTY_BASE_ASSET_ID, + LimitExecutionResponseDetails.JSON_PROPERTY_BASE_ASSET_RAIL, + LimitExecutionResponseDetails.JSON_PROPERTY_QUOTE_ASSET_ID, + LimitExecutionResponseDetails.JSON_PROPERTY_QUOTE_ASSET_RAIL +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class LimitExecutionResponseDetails { + public static final String JSON_PROPERTY_TYPE = "type"; + @jakarta.annotation.Nonnull private LimitTypeEnum type; + + public static final String JSON_PROPERTY_PRICE = "price"; + @jakarta.annotation.Nonnull private String price; + + public static final String JSON_PROPERTY_TIME_IN_FORCE = "timeInForce"; + @jakarta.annotation.Nonnull private FokTimeInForce timeInForce; + + public static final String JSON_PROPERTY_SIDE = "side"; + @jakarta.annotation.Nonnull private Side side; + + public static final String JSON_PROPERTY_BASE_AMOUNT = "baseAmount"; + @jakarta.annotation.Nonnull private String baseAmount; + + public static final String JSON_PROPERTY_BASE_ASSET_ID = "baseAssetId"; + @jakarta.annotation.Nonnull private String baseAssetId; + + public static final String JSON_PROPERTY_BASE_ASSET_RAIL = "baseAssetRail"; + @jakarta.annotation.Nullable private TransferRail baseAssetRail; + + public static final String JSON_PROPERTY_QUOTE_ASSET_ID = "quoteAssetId"; + @jakarta.annotation.Nonnull private String quoteAssetId; + + public static final String JSON_PROPERTY_QUOTE_ASSET_RAIL = "quoteAssetRail"; + @jakarta.annotation.Nullable private TransferRail quoteAssetRail; + + public LimitExecutionResponseDetails() {} + + @JsonCreator + public LimitExecutionResponseDetails( + @JsonProperty(value = JSON_PROPERTY_TYPE, required = true) LimitTypeEnum type, + @JsonProperty(value = JSON_PROPERTY_PRICE, required = true) String price, + @JsonProperty(value = JSON_PROPERTY_TIME_IN_FORCE, required = true) + FokTimeInForce timeInForce, + @JsonProperty(value = JSON_PROPERTY_SIDE, required = true) Side side, + @JsonProperty(value = JSON_PROPERTY_BASE_AMOUNT, required = true) String baseAmount, + @JsonProperty(value = JSON_PROPERTY_BASE_ASSET_ID, required = true) String baseAssetId, + @JsonProperty(value = JSON_PROPERTY_QUOTE_ASSET_ID, required = true) + String quoteAssetId) { + this.type = type; + this.price = price; + this.timeInForce = timeInForce; + this.side = side; + this.baseAmount = baseAmount; + this.baseAssetId = baseAssetId; + this.quoteAssetId = quoteAssetId; + } + + public LimitExecutionResponseDetails type(@jakarta.annotation.Nonnull LimitTypeEnum type) { + this.type = type; + return this; + } + + /** + * Get type + * + * @return type + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LimitTypeEnum getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(@jakarta.annotation.Nonnull LimitTypeEnum type) { + this.type = type; + } + + public LimitExecutionResponseDetails price(@jakarta.annotation.Nonnull String price) { + this.price = price; + return this; + } + + /** + * Limit price for the order + * + * @return price + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_PRICE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getPrice() { + return price; + } + + @JsonProperty(JSON_PROPERTY_PRICE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setPrice(@jakarta.annotation.Nonnull String price) { + this.price = price; + } + + public LimitExecutionResponseDetails timeInForce( + @jakarta.annotation.Nonnull FokTimeInForce timeInForce) { + this.timeInForce = timeInForce; + return this; + } + + /** + * Get timeInForce + * + * @return timeInForce + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TIME_IN_FORCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public FokTimeInForce getTimeInForce() { + return timeInForce; + } + + @JsonProperty(JSON_PROPERTY_TIME_IN_FORCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTimeInForce(@jakarta.annotation.Nonnull FokTimeInForce timeInForce) { + this.timeInForce = timeInForce; + } + + public LimitExecutionResponseDetails side(@jakarta.annotation.Nonnull Side side) { + this.side = side; + return this; + } + + /** + * Get side + * + * @return side + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_SIDE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Side getSide() { + return side; + } + + @JsonProperty(JSON_PROPERTY_SIDE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSide(@jakarta.annotation.Nonnull Side side) { + this.side = side; + } + + public LimitExecutionResponseDetails baseAmount(@jakarta.annotation.Nonnull String baseAmount) { + this.baseAmount = baseAmount; + return this; + } + + /** + * Amount to convert + * + * @return baseAmount + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_BASE_AMOUNT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getBaseAmount() { + return baseAmount; + } + + @JsonProperty(JSON_PROPERTY_BASE_AMOUNT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setBaseAmount(@jakarta.annotation.Nonnull String baseAmount) { + this.baseAmount = baseAmount; + } + + public LimitExecutionResponseDetails baseAssetId( + @jakarta.annotation.Nonnull String baseAssetId) { + this.baseAssetId = baseAssetId; + return this; + } + + /** + * Source asset identifier + * + * @return baseAssetId + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_BASE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getBaseAssetId() { + return baseAssetId; + } + + @JsonProperty(JSON_PROPERTY_BASE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setBaseAssetId(@jakarta.annotation.Nonnull String baseAssetId) { + this.baseAssetId = baseAssetId; + } + + public LimitExecutionResponseDetails baseAssetRail( + @jakarta.annotation.Nullable TransferRail baseAssetRail) { + this.baseAssetRail = baseAssetRail; + return this; + } + + /** + * Get baseAssetRail + * + * @return baseAssetRail + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_BASE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TransferRail getBaseAssetRail() { + return baseAssetRail; + } + + @JsonProperty(JSON_PROPERTY_BASE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBaseAssetRail(@jakarta.annotation.Nullable TransferRail baseAssetRail) { + this.baseAssetRail = baseAssetRail; + } + + public LimitExecutionResponseDetails quoteAssetId( + @jakarta.annotation.Nonnull String quoteAssetId) { + this.quoteAssetId = quoteAssetId; + return this; + } + + /** + * Target asset identifier + * + * @return quoteAssetId + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getQuoteAssetId() { + return quoteAssetId; + } + + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setQuoteAssetId(@jakarta.annotation.Nonnull String quoteAssetId) { + this.quoteAssetId = quoteAssetId; + } + + public LimitExecutionResponseDetails quoteAssetRail( + @jakarta.annotation.Nullable TransferRail quoteAssetRail) { + this.quoteAssetRail = quoteAssetRail; + return this; + } + + /** + * Get quoteAssetRail + * + * @return quoteAssetRail + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TransferRail getQuoteAssetRail() { + return quoteAssetRail; + } + + @JsonProperty(JSON_PROPERTY_QUOTE_ASSET_RAIL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setQuoteAssetRail(@jakarta.annotation.Nullable TransferRail quoteAssetRail) { + this.quoteAssetRail = quoteAssetRail; + } + + /** Return true if this LimitExecutionResponseDetails object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LimitExecutionResponseDetails limitExecutionResponseDetails = + (LimitExecutionResponseDetails) o; + return Objects.equals(this.type, limitExecutionResponseDetails.type) + && Objects.equals(this.price, limitExecutionResponseDetails.price) + && Objects.equals(this.timeInForce, limitExecutionResponseDetails.timeInForce) + && Objects.equals(this.side, limitExecutionResponseDetails.side) + && Objects.equals(this.baseAmount, limitExecutionResponseDetails.baseAmount) + && Objects.equals(this.baseAssetId, limitExecutionResponseDetails.baseAssetId) + && Objects.equals(this.baseAssetRail, limitExecutionResponseDetails.baseAssetRail) + && Objects.equals(this.quoteAssetId, limitExecutionResponseDetails.quoteAssetId) + && Objects.equals( + this.quoteAssetRail, limitExecutionResponseDetails.quoteAssetRail); + } + + @Override + public int hashCode() { + return Objects.hash( + type, + price, + timeInForce, + side, + baseAmount, + baseAssetId, + baseAssetRail, + quoteAssetId, + quoteAssetRail); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LimitExecutionResponseDetails {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" price: ").append(toIndentedString(price)).append("\n"); + sb.append(" timeInForce: ").append(toIndentedString(timeInForce)).append("\n"); + sb.append(" side: ").append(toIndentedString(side)).append("\n"); + sb.append(" baseAmount: ").append(toIndentedString(baseAmount)).append("\n"); + sb.append(" baseAssetId: ").append(toIndentedString(baseAssetId)).append("\n"); + sb.append(" baseAssetRail: ").append(toIndentedString(baseAssetRail)).append("\n"); + sb.append(" quoteAssetId: ").append(toIndentedString(quoteAssetId)).append("\n"); + sb.append(" quoteAssetRail: ").append(toIndentedString(quoteAssetRail)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add( + String.format( + "%stype%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `price` to the URL query string + if (getPrice() != null) { + joiner.add( + String.format( + "%sprice%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getPrice())))); + } + + // add `timeInForce` to the URL query string + if (getTimeInForce() != null) { + joiner.add(getTimeInForce().toUrlQueryString(prefix + "timeInForce" + suffix)); + } + + // add `side` to the URL query string + if (getSide() != null) { + joiner.add( + String.format( + "%sside%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getSide())))); + } + + // add `baseAmount` to the URL query string + if (getBaseAmount() != null) { + joiner.add( + String.format( + "%sbaseAmount%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getBaseAmount())))); + } + + // add `baseAssetId` to the URL query string + if (getBaseAssetId() != null) { + joiner.add( + String.format( + "%sbaseAssetId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getBaseAssetId())))); + } + + // add `baseAssetRail` to the URL query string + if (getBaseAssetRail() != null) { + joiner.add( + String.format( + "%sbaseAssetRail%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getBaseAssetRail())))); + } + + // add `quoteAssetId` to the URL query string + if (getQuoteAssetId() != null) { + joiner.add( + String.format( + "%squoteAssetId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getQuoteAssetId())))); + } + + // add `quoteAssetRail` to the URL query string + if (getQuoteAssetRail() != null) { + joiner.add( + String.format( + "%squoteAssetRail%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getQuoteAssetRail())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/LimitTypeDetails.java b/src/main/java/com/fireblocks/sdk/model/LimitTypeDetails.java new file mode 100644 index 00000000..d2c02ce7 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/LimitTypeDetails.java @@ -0,0 +1,226 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** LimitTypeDetails */ +@JsonPropertyOrder({ + LimitTypeDetails.JSON_PROPERTY_TYPE, + LimitTypeDetails.JSON_PROPERTY_PRICE, + LimitTypeDetails.JSON_PROPERTY_TIME_IN_FORCE +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class LimitTypeDetails { + public static final String JSON_PROPERTY_TYPE = "type"; + @jakarta.annotation.Nonnull private LimitTypeEnum type; + + public static final String JSON_PROPERTY_PRICE = "price"; + @jakarta.annotation.Nonnull private String price; + + public static final String JSON_PROPERTY_TIME_IN_FORCE = "timeInForce"; + @jakarta.annotation.Nonnull private FokTimeInForce timeInForce; + + public LimitTypeDetails() {} + + @JsonCreator + public LimitTypeDetails( + @JsonProperty(value = JSON_PROPERTY_TYPE, required = true) LimitTypeEnum type, + @JsonProperty(value = JSON_PROPERTY_PRICE, required = true) String price, + @JsonProperty(value = JSON_PROPERTY_TIME_IN_FORCE, required = true) + FokTimeInForce timeInForce) { + this.type = type; + this.price = price; + this.timeInForce = timeInForce; + } + + public LimitTypeDetails type(@jakarta.annotation.Nonnull LimitTypeEnum type) { + this.type = type; + return this; + } + + /** + * Get type + * + * @return type + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LimitTypeEnum getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(@jakarta.annotation.Nonnull LimitTypeEnum type) { + this.type = type; + } + + public LimitTypeDetails price(@jakarta.annotation.Nonnull String price) { + this.price = price; + return this; + } + + /** + * Limit price for the order + * + * @return price + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_PRICE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getPrice() { + return price; + } + + @JsonProperty(JSON_PROPERTY_PRICE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setPrice(@jakarta.annotation.Nonnull String price) { + this.price = price; + } + + public LimitTypeDetails timeInForce(@jakarta.annotation.Nonnull FokTimeInForce timeInForce) { + this.timeInForce = timeInForce; + return this; + } + + /** + * Get timeInForce + * + * @return timeInForce + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TIME_IN_FORCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public FokTimeInForce getTimeInForce() { + return timeInForce; + } + + @JsonProperty(JSON_PROPERTY_TIME_IN_FORCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTimeInForce(@jakarta.annotation.Nonnull FokTimeInForce timeInForce) { + this.timeInForce = timeInForce; + } + + /** Return true if this LimitTypeDetails object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LimitTypeDetails limitTypeDetails = (LimitTypeDetails) o; + return Objects.equals(this.type, limitTypeDetails.type) + && Objects.equals(this.price, limitTypeDetails.price) + && Objects.equals(this.timeInForce, limitTypeDetails.timeInForce); + } + + @Override + public int hashCode() { + return Objects.hash(type, price, timeInForce); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LimitTypeDetails {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" price: ").append(toIndentedString(price)).append("\n"); + sb.append(" timeInForce: ").append(toIndentedString(timeInForce)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add( + String.format( + "%stype%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `price` to the URL query string + if (getPrice() != null) { + joiner.add( + String.format( + "%sprice%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getPrice())))); + } + + // add `timeInForce` to the URL query string + if (getTimeInForce() != null) { + joiner.add(getTimeInForce().toUrlQueryString(prefix + "timeInForce" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/LimitTypeEnum.java b/src/main/java/com/fireblocks/sdk/model/LimitTypeEnum.java new file mode 100644 index 00000000..29a314a2 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/LimitTypeEnum.java @@ -0,0 +1,62 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** Order type for limit orders */ +public enum LimitTypeEnum { + LIMIT("LIMIT"); + + private String value; + + LimitTypeEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static LimitTypeEnum fromValue(String value) { + for (LimitTypeEnum b : LimitTypeEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponse.java b/src/main/java/com/fireblocks/sdk/model/OfferResponse.java index 4473657a..e41b62ae 100644 --- a/src/main/java/com/fireblocks/sdk/model/OfferResponse.java +++ b/src/main/java/com/fireblocks/sdk/model/OfferResponse.java @@ -262,9 +262,9 @@ public OfferResponse(OfferResponseTransfer o) { JSON.registerDescendants(OfferResponse.class, Collections.unmodifiableMap(schemas)); // Initialize and register the discriminator mappings. Map> mappings = new HashMap>(); - mappings.put("ALLOCATIONS", OfferResponseAllocation.class); + mappings.put("ALLOCATION", OfferResponseAllocation.class); mappings.put("ONBOARDING", OfferResponseOnboarding.class); - mappings.put("TRANSFERS", OfferResponseTransfer.class); + mappings.put("TRANSFER", OfferResponseTransfer.class); mappings.put("OfferResponseAllocation", OfferResponseAllocation.class); mappings.put("OfferResponseOnboarding", OfferResponseOnboarding.class); mappings.put("OfferResponseTransfer", OfferResponseTransfer.class); diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocation.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocation.java index 35ae9a2b..9e2ed041 100644 --- a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocation.java +++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocation.java @@ -33,7 +33,7 @@ public class OfferResponseAllocation { /** Which offer domain this response belongs to. Selects the shape of `response`. */ public enum DomainEnum { - ALLOCATIONS(String.valueOf("ALLOCATIONS")); + ALLOCATION(String.valueOf("ALLOCATION")); private String value; diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransfer.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransfer.java index aa6f3fe4..ada10a31 100644 --- a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransfer.java +++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransfer.java @@ -33,7 +33,7 @@ public class OfferResponseTransfer { /** Which offer domain this response belongs to. Selects the shape of `response`. */ public enum DomainEnum { - TRANSFERS(String.valueOf("TRANSFERS")); + TRANSFER(String.valueOf("TRANSFER")); private String value; diff --git a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccAccept.java b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccAccept.java index 38ed7904..44454e75 100644 --- a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccAccept.java +++ b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccAccept.java @@ -29,8 +29,14 @@ comments = "Generator version: 7.14.0") public class OnboardingResponseDtccAccept { /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. */ public enum ResponseTypeEnum { DTCC_END_INVESTOR_ONBOARDING_ACCEPT(String.valueOf("DTCC_END_INVESTOR_ONBOARDING_ACCEPT")); @@ -81,8 +87,14 @@ public OnboardingResponseDtccAccept responseType( } /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. * * @return responseType */ diff --git a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccReject.java b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccReject.java index d3e5a8bf..e7574f4b 100644 --- a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccReject.java +++ b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseDtccReject.java @@ -32,8 +32,14 @@ comments = "Generator version: 7.14.0") public class OnboardingResponseDtccReject { /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. */ public enum ResponseTypeEnum { DTCC_END_INVESTOR_ONBOARDING_REJECT(String.valueOf("DTCC_END_INVESTOR_ONBOARDING_REJECT")); @@ -89,8 +95,14 @@ public OnboardingResponseDtccReject responseType( } /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. * * @return responseType */ diff --git a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebAccept.java b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebAccept.java index 7fad8a59..08380461 100644 --- a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebAccept.java +++ b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebAccept.java @@ -29,8 +29,14 @@ comments = "Generator version: 7.14.0") public class OnboardingResponseTradewebAccept { /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. */ public enum ResponseTypeEnum { TRADEWEB_COSIGNING_DELEGATION_ACCEPT( @@ -82,8 +88,14 @@ public OnboardingResponseTradewebAccept responseType( } /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. * * @return responseType */ diff --git a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebReject.java b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebReject.java index 89a5d413..398b0633 100644 --- a/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebReject.java +++ b/src/main/java/com/fireblocks/sdk/model/OnboardingResponseTradewebReject.java @@ -32,8 +32,14 @@ comments = "Generator version: 7.14.0") public class OnboardingResponseTradewebReject { /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. */ public enum ResponseTypeEnum { TRADEWEB_COSIGNING_DELEGATION_REJECT( @@ -85,8 +91,14 @@ public OnboardingResponseTradewebReject responseType( } /** - * How you are answering the offer. Must be one of the values currently listed in the - * transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. + * How you are answering the offer. Must be one of the values listed in the transaction's + * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, + * not nested under an `additionalInfo` envelope, which does not exist on + * `TransactionResponse`. `availableResponses` states what this offer TYPE + * accepts. It is set when the offer arrives and does not change, so it does NOT tell you + * whether the offer is still answerable — check `expiresAt` and the transaction's + * status for that, and expect this endpoint to be the authority: it re-checks state and expiry + * on every call and answers 409 when either has moved. * * @return responseType */ diff --git a/src/main/java/com/fireblocks/sdk/model/ParticipantOnboardingPayload.java b/src/main/java/com/fireblocks/sdk/model/ParticipantOnboardingPayload.java index 0b38f964..f5958b13 100644 --- a/src/main/java/com/fireblocks/sdk/model/ParticipantOnboardingPayload.java +++ b/src/main/java/com/fireblocks/sdk/model/ParticipantOnboardingPayload.java @@ -29,10 +29,10 @@ ParticipantOnboardingPayload.JSON_PROPERTY_ASSET, ParticipantOnboardingPayload.JSON_PROPERTY_EXPIRES_AT, ParticipantOnboardingPayload.JSON_PROPERTY_OPERATOR, - ParticipantOnboardingPayload.JSON_PROPERTY_PROVIDER, ParticipantOnboardingPayload.JSON_PROPERTY_COMPLIANCE, ParticipantOnboardingPayload.JSON_PROPERTY_REGISTRAR, - ParticipantOnboardingPayload.JSON_PROPERTY_CLIENT_ONBOARDER + ParticipantOnboardingPayload.JSON_PROPERTY_CLIENT_ONBOARDER, + ParticipantOnboardingPayload.JSON_PROPERTY_UPGRADER }) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", @@ -83,9 +83,6 @@ public static AssetEnum fromValue(String value) { public static final String JSON_PROPERTY_OPERATOR = "operator"; @jakarta.annotation.Nonnull private String operator; - public static final String JSON_PROPERTY_PROVIDER = "provider"; - @jakarta.annotation.Nonnull private String provider; - public static final String JSON_PROPERTY_COMPLIANCE = "compliance"; @jakarta.annotation.Nonnull private String compliance; @@ -95,6 +92,9 @@ public static AssetEnum fromValue(String value) { public static final String JSON_PROPERTY_CLIENT_ONBOARDER = "clientOnboarder"; @jakarta.annotation.Nonnull private String clientOnboarder; + public static final String JSON_PROPERTY_UPGRADER = "upgrader"; + @jakarta.annotation.Nonnull private String upgrader; + public ParticipantOnboardingPayload() {} @JsonCreator @@ -103,18 +103,18 @@ public ParticipantOnboardingPayload( String vaultAccountId, @JsonProperty(value = JSON_PROPERTY_ASSET, required = true) AssetEnum asset, @JsonProperty(value = JSON_PROPERTY_OPERATOR, required = true) String operator, - @JsonProperty(value = JSON_PROPERTY_PROVIDER, required = true) String provider, @JsonProperty(value = JSON_PROPERTY_COMPLIANCE, required = true) String compliance, @JsonProperty(value = JSON_PROPERTY_REGISTRAR, required = true) String registrar, @JsonProperty(value = JSON_PROPERTY_CLIENT_ONBOARDER, required = true) - String clientOnboarder) { + String clientOnboarder, + @JsonProperty(value = JSON_PROPERTY_UPGRADER, required = true) String upgrader) { this.vaultAccountId = vaultAccountId; this.asset = asset; this.operator = operator; - this.provider = provider; this.compliance = compliance; this.registrar = registrar; this.clientOnboarder = clientOnboarder; + this.upgrader = upgrader; } public ParticipantOnboardingPayload vaultAccountId( @@ -211,29 +211,6 @@ public void setOperator(@jakarta.annotation.Nonnull String operator) { this.operator = operator; } - public ParticipantOnboardingPayload provider(@jakarta.annotation.Nonnull String provider) { - this.provider = provider; - return this; - } - - /** - * DTCC provider party id. - * - * @return provider - */ - @jakarta.annotation.Nonnull - @JsonProperty(JSON_PROPERTY_PROVIDER) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public String getProvider() { - return provider; - } - - @JsonProperty(JSON_PROPERTY_PROVIDER) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setProvider(@jakarta.annotation.Nonnull String provider) { - this.provider = provider; - } - public ParticipantOnboardingPayload compliance(@jakarta.annotation.Nonnull String compliance) { this.compliance = compliance; return this; @@ -304,6 +281,30 @@ public void setClientOnboarder(@jakarta.annotation.Nonnull String clientOnboarde this.clientOnboarder = clientOnboarder; } + public ParticipantOnboardingPayload upgrader(@jakarta.annotation.Nonnull String upgrader) { + this.upgrader = upgrader; + return this; + } + + /** + * DTCC upgrader party id — the Model Upgrade Tool authority. Supplied by DTCC during the + * off-chain registration, alongside the other party ids. + * + * @return upgrader + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_UPGRADER) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getUpgrader() { + return upgrader; + } + + @JsonProperty(JSON_PROPERTY_UPGRADER) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setUpgrader(@jakarta.annotation.Nonnull String upgrader) { + this.upgrader = upgrader; + } + /** Return true if this ParticipantOnboardingPayload object is equal to o. */ @Override public boolean equals(Object o) { @@ -319,11 +320,11 @@ public boolean equals(Object o) { && Objects.equals(this.asset, participantOnboardingPayload.asset) && Objects.equals(this.expiresAt, participantOnboardingPayload.expiresAt) && Objects.equals(this.operator, participantOnboardingPayload.operator) - && Objects.equals(this.provider, participantOnboardingPayload.provider) && Objects.equals(this.compliance, participantOnboardingPayload.compliance) && Objects.equals(this.registrar, participantOnboardingPayload.registrar) && Objects.equals( - this.clientOnboarder, participantOnboardingPayload.clientOnboarder); + this.clientOnboarder, participantOnboardingPayload.clientOnboarder) + && Objects.equals(this.upgrader, participantOnboardingPayload.upgrader); } @Override @@ -333,10 +334,10 @@ public int hashCode() { asset, expiresAt, operator, - provider, compliance, registrar, - clientOnboarder); + clientOnboarder, + upgrader); } @Override @@ -347,10 +348,10 @@ public String toString() { sb.append(" asset: ").append(toIndentedString(asset)).append("\n"); sb.append(" expiresAt: ").append(toIndentedString(expiresAt)).append("\n"); sb.append(" operator: ").append(toIndentedString(operator)).append("\n"); - sb.append(" provider: ").append(toIndentedString(provider)).append("\n"); sb.append(" compliance: ").append(toIndentedString(compliance)).append("\n"); sb.append(" registrar: ").append(toIndentedString(registrar)).append("\n"); sb.append(" clientOnboarder: ").append(toIndentedString(clientOnboarder)).append("\n"); + sb.append(" upgrader: ").append(toIndentedString(upgrader)).append("\n"); sb.append("}"); return sb.toString(); } @@ -438,16 +439,6 @@ public String toUrlQueryString(String prefix) { ApiClient.urlEncode(ApiClient.valueToString(getOperator())))); } - // add `provider` to the URL query string - if (getProvider() != null) { - joiner.add( - String.format( - "%sprovider%s=%s", - prefix, - suffix, - ApiClient.urlEncode(ApiClient.valueToString(getProvider())))); - } - // add `compliance` to the URL query string if (getCompliance() != null) { joiner.add( @@ -478,6 +469,16 @@ public String toUrlQueryString(String prefix) { ApiClient.urlEncode(ApiClient.valueToString(getClientOnboarder())))); } + // add `upgrader` to the URL query string + if (getUpgrader() != null) { + joiner.add( + String.format( + "%supgrader%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getUpgrader())))); + } + return joiner.toString(); } } diff --git a/src/main/java/com/fireblocks/sdk/model/PostTradeSettlement.java b/src/main/java/com/fireblocks/sdk/model/PostTradeSettlement.java new file mode 100644 index 00000000..805b863b --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/PostTradeSettlement.java @@ -0,0 +1,147 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** Nothing moves on-platform; settlement happens bilaterally, provider-side, after execution. */ +@JsonPropertyOrder({PostTradeSettlement.JSON_PROPERTY_TYPE}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class PostTradeSettlement { + public static final String JSON_PROPERTY_TYPE = "type"; + @jakarta.annotation.Nonnull private PostTradeSettlementType type; + + public PostTradeSettlement() {} + + @JsonCreator + public PostTradeSettlement( + @JsonProperty(value = JSON_PROPERTY_TYPE, required = true) + PostTradeSettlementType type) { + this.type = type; + } + + public PostTradeSettlement type(@jakarta.annotation.Nonnull PostTradeSettlementType type) { + this.type = type; + return this; + } + + /** + * Get type + * + * @return type + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public PostTradeSettlementType getType() { + return type; + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(@jakarta.annotation.Nonnull PostTradeSettlementType type) { + this.type = type; + } + + /** Return true if this PostTradeSettlement object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostTradeSettlement postTradeSettlement = (PostTradeSettlement) o; + return Objects.equals(this.type, postTradeSettlement.type); + } + + @Override + public int hashCode() { + return Objects.hash(type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PostTradeSettlement {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add( + String.format( + "%stype%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/PostTradeSettlementType.java b/src/main/java/com/fireblocks/sdk/model/PostTradeSettlementType.java new file mode 100644 index 00000000..937c4a7d --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/PostTradeSettlementType.java @@ -0,0 +1,62 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** Gets or Sets PostTradeSettlementType */ +public enum PostTradeSettlementType { + POST_TRADE("POST_TRADE"); + + private String value; + + PostTradeSettlementType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static PostTradeSettlementType fromValue(String value) { + for (PostTradeSettlementType b : PostTradeSettlementType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/Quote.java b/src/main/java/com/fireblocks/sdk/model/Quote.java index e698c00e..4c2c612b 100644 --- a/src/main/java/com/fireblocks/sdk/model/Quote.java +++ b/src/main/java/com/fireblocks/sdk/model/Quote.java @@ -505,7 +505,9 @@ public Quote expiresAt(@jakarta.annotation.Nonnull String expiresAt) { } /** - * The expiration time of the quote in ISO 8601 format. + * The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This + * is not safety-margined by the server — integrators must apply their own margin if one is + * needed. * * @return expiresAt */ diff --git a/src/main/java/com/fireblocks/sdk/model/QuoteOffer.java b/src/main/java/com/fireblocks/sdk/model/QuoteOffer.java index 918180df..804d3c2f 100644 --- a/src/main/java/com/fireblocks/sdk/model/QuoteOffer.java +++ b/src/main/java/com/fireblocks/sdk/model/QuoteOffer.java @@ -543,7 +543,9 @@ public QuoteOffer expiresAt(@jakarta.annotation.Nonnull String expiresAt) { } /** - * The expiration time of the quote in ISO 8601 format. + * The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This + * is not safety-margined by the server — integrators must apply their own margin if one is + * needed. * * @return expiresAt */ diff --git a/src/main/java/com/fireblocks/sdk/model/RatesRequest.java b/src/main/java/com/fireblocks/sdk/model/RatesRequest.java index c4d0dc71..b6a018ca 100644 --- a/src/main/java/com/fireblocks/sdk/model/RatesRequest.java +++ b/src/main/java/com/fireblocks/sdk/model/RatesRequest.java @@ -27,7 +27,8 @@ @JsonPropertyOrder({ RatesRequest.JSON_PROPERTY_SCOPE, RatesRequest.JSON_PROPERTY_BASE_ASSET_ID, - RatesRequest.JSON_PROPERTY_QUOTE_ASSET_ID + RatesRequest.JSON_PROPERTY_QUOTE_ASSET_ID, + RatesRequest.JSON_PROPERTY_BASE_AMOUNT }) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", @@ -42,6 +43,9 @@ public class RatesRequest { public static final String JSON_PROPERTY_QUOTE_ASSET_ID = "quoteAssetId"; @jakarta.annotation.Nonnull private String quoteAssetId; + public static final String JSON_PROPERTY_BASE_AMOUNT = "baseAmount"; + @jakarta.annotation.Nullable private String baseAmount; + public RatesRequest() {} @JsonCreator @@ -132,6 +136,29 @@ public void setQuoteAssetId(@jakarta.annotation.Nonnull String quoteAssetId) { this.quoteAssetId = quoteAssetId; } + public RatesRequest baseAmount(@jakarta.annotation.Nullable String baseAmount) { + this.baseAmount = baseAmount; + return this; + } + + /** + * The amount to convert from + * + * @return baseAmount + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_BASE_AMOUNT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getBaseAmount() { + return baseAmount; + } + + @JsonProperty(JSON_PROPERTY_BASE_AMOUNT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBaseAmount(@jakarta.annotation.Nullable String baseAmount) { + this.baseAmount = baseAmount; + } + /** Return true if this RatesRequest object is equal to o. */ @Override public boolean equals(Object o) { @@ -144,12 +171,13 @@ public boolean equals(Object o) { RatesRequest ratesRequest = (RatesRequest) o; return Objects.equals(this.scope, ratesRequest.scope) && Objects.equals(this.baseAssetId, ratesRequest.baseAssetId) - && Objects.equals(this.quoteAssetId, ratesRequest.quoteAssetId); + && Objects.equals(this.quoteAssetId, ratesRequest.quoteAssetId) + && Objects.equals(this.baseAmount, ratesRequest.baseAmount); } @Override public int hashCode() { - return Objects.hash(scope, baseAssetId, quoteAssetId); + return Objects.hash(scope, baseAssetId, quoteAssetId, baseAmount); } @Override @@ -159,6 +187,7 @@ public String toString() { sb.append(" scope: ").append(toIndentedString(scope)).append("\n"); sb.append(" baseAssetId: ").append(toIndentedString(baseAssetId)).append("\n"); sb.append(" quoteAssetId: ").append(toIndentedString(quoteAssetId)).append("\n"); + sb.append(" baseAmount: ").append(toIndentedString(baseAmount)).append("\n"); sb.append("}"); return sb.toString(); } @@ -249,6 +278,16 @@ public String toUrlQueryString(String prefix) { ApiClient.urlEncode(ApiClient.valueToString(getQuoteAssetId())))); } + // add `baseAmount` to the URL query string + if (getBaseAmount() != null) { + joiner.add( + String.format( + "%sbaseAmount%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getBaseAmount())))); + } + return joiner.toString(); } } diff --git a/src/main/java/com/fireblocks/sdk/model/Settlement.java b/src/main/java/com/fireblocks/sdk/model/Settlement.java index 52deed68..f29e9a06 100644 --- a/src/main/java/com/fireblocks/sdk/model/Settlement.java +++ b/src/main/java/com/fireblocks/sdk/model/Settlement.java @@ -119,6 +119,49 @@ public Settlement deserialize(JsonParser jp, DeserializationContext ctxt) log.log(Level.FINER, "Input data does not match schema 'DVPSettlement'", e); } + // deserialize PostTradeSettlement + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (PostTradeSettlement.class.equals(Integer.class) + || PostTradeSettlement.class.equals(Long.class) + || PostTradeSettlement.class.equals(Float.class) + || PostTradeSettlement.class.equals(Double.class) + || PostTradeSettlement.class.equals(Boolean.class) + || PostTradeSettlement.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((PostTradeSettlement.class.equals(Integer.class) + || PostTradeSettlement.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((PostTradeSettlement.class.equals(Float.class) + || PostTradeSettlement.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (PostTradeSettlement.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE + || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (PostTradeSettlement.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()).readValueAs(PostTradeSettlement.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'PostTradeSettlement'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'PostTradeSettlement'", e); + } + // deserialize PrefundedSettlement try { boolean attemptParsing = true; @@ -193,6 +236,11 @@ public Settlement(DVPSettlement o) { setActualInstance(o); } + public Settlement(PostTradeSettlement o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public Settlement(PrefundedSettlement o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -200,13 +248,16 @@ public Settlement(PrefundedSettlement o) { static { schemas.put("DVPSettlement", DVPSettlement.class); + schemas.put("PostTradeSettlement", PostTradeSettlement.class); schemas.put("PrefundedSettlement", PrefundedSettlement.class); JSON.registerDescendants(Settlement.class, Collections.unmodifiableMap(schemas)); // Initialize and register the discriminator mappings. Map> mappings = new HashMap>(); mappings.put("DVP", DVPSettlement.class); + mappings.put("POST_TRADE", PostTradeSettlement.class); mappings.put("PREFUNDED", PrefundedSettlement.class); mappings.put("DVPSettlement", DVPSettlement.class); + mappings.put("PostTradeSettlement", PostTradeSettlement.class); mappings.put("PrefundedSettlement", PrefundedSettlement.class); mappings.put("Settlement", Settlement.class); JSON.registerDiscriminator(Settlement.class, "type", mappings); @@ -219,7 +270,7 @@ public Map> getSchemas() { /** * Set the instance that matches the oneOf child schema, check the instance parameter is valid - * against the oneOf child schemas: DVPSettlement, PrefundedSettlement + * against the oneOf child schemas: DVPSettlement, PostTradeSettlement, PrefundedSettlement * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be * a composed schema (allOf, anyOf, oneOf). @@ -231,19 +282,26 @@ public void setActualInstance(Object instance) { return; } + if (JSON.isInstanceOf(PostTradeSettlement.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf(PrefundedSettlement.class, instance, new HashSet>())) { super.setActualInstance(instance); return; } throw new RuntimeException( - "Invalid instance type. Must be DVPSettlement, PrefundedSettlement"); + "Invalid instance type. Must be DVPSettlement, PostTradeSettlement," + + " PrefundedSettlement"); } /** - * Get the actual instance, which can be the following: DVPSettlement, PrefundedSettlement + * Get the actual instance, which can be the following: DVPSettlement, PostTradeSettlement, + * PrefundedSettlement * - * @return The actual instance (DVPSettlement, PrefundedSettlement) + * @return The actual instance (DVPSettlement, PostTradeSettlement, PrefundedSettlement) */ @Override public Object getActualInstance() { @@ -261,6 +319,17 @@ public DVPSettlement getDVPSettlement() throws ClassCastException { return (DVPSettlement) super.getActualInstance(); } + /** + * Get the actual instance of `PostTradeSettlement`. If the actual instance is not + * `PostTradeSettlement`, the ClassCastException will be thrown. + * + * @return The actual instance of `PostTradeSettlement` + * @throws ClassCastException if the instance is not `PostTradeSettlement` + */ + public PostTradeSettlement getPostTradeSettlement() throws ClassCastException { + return (PostTradeSettlement) super.getActualInstance(); + } + /** * Get the actual instance of `PrefundedSettlement`. If the actual instance is not * `PrefundedSettlement`, the ClassCastException will be thrown. @@ -320,6 +389,14 @@ public String toUrlQueryString(String prefix) { } return joiner.toString(); } + if (getActualInstance() instanceof PostTradeSettlement) { + if (getActualInstance() != null) { + joiner.add( + ((PostTradeSettlement) getActualInstance()) + .toUrlQueryString(prefix + "one_of_2" + suffix)); + } + return joiner.toString(); + } return null; } } diff --git a/src/main/java/com/fireblocks/sdk/model/SettlementTypeEnum.java b/src/main/java/com/fireblocks/sdk/model/SettlementTypeEnum.java index deb1a28c..79856655 100644 --- a/src/main/java/com/fireblocks/sdk/model/SettlementTypeEnum.java +++ b/src/main/java/com/fireblocks/sdk/model/SettlementTypeEnum.java @@ -20,7 +20,9 @@ public enum SettlementTypeEnum { DVP("DVP"), - PREFUNDED("PREFUNDED"); + PREFUNDED("PREFUNDED"), + + POST_TRADE("POST_TRADE"); private String value; diff --git a/src/main/java/com/fireblocks/sdk/model/TransactionOperation.java b/src/main/java/com/fireblocks/sdk/model/TransactionOperation.java index a3135ba6..7f6541f5 100644 --- a/src/main/java/com/fireblocks/sdk/model/TransactionOperation.java +++ b/src/main/java/com/fireblocks/sdk/model/TransactionOperation.java @@ -40,7 +40,12 @@ * more](https://support.fireblocks.io/hc/en-us/articles/4404616097426-Amount-Cap-for-Approve-transactions). * * `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain * transaction to create an asset wallet and enable the deposit address. This transaction is - * automatically created when adding assets on these blockchains at a vault account. + * automatically created when adding assets on these blockchains at a vault account. * + * `CANTON_CALL` - A customer-initiated Canton operation, such as withdrawing an + * allocation or responding to an onboarding offer. Note that not every Canton transaction carries + * this operation — an incoming Canton transfer offer is a `TRANSFER` — so use the + * top-level `cantonDetails` rather than `operation` to identify a Canton + * transaction. */ public enum TransactionOperation { TRANSFER("TRANSFER"), @@ -59,7 +64,9 @@ public enum TransactionOperation { APPROVE("APPROVE"), - ENABLE_ASSET("ENABLE_ASSET"); + ENABLE_ASSET("ENABLE_ASSET"), + + CANTON_CALL("CANTON_CALL"); private String value; diff --git a/src/main/java/com/fireblocks/sdk/model/TransactionResponse.java b/src/main/java/com/fireblocks/sdk/model/TransactionResponse.java index 69ac83ae..786a3ec6 100644 --- a/src/main/java/com/fireblocks/sdk/model/TransactionResponse.java +++ b/src/main/java/com/fireblocks/sdk/model/TransactionResponse.java @@ -51,6 +51,7 @@ TransactionResponse.JSON_PROPERTY_FEE_INFO, TransactionResponse.JSON_PROPERTY_FEE_CURRENCY, TransactionResponse.JSON_PROPERTY_REQUESTED_FEE_CURRENCY, + TransactionResponse.JSON_PROPERTY_CANTON_DETAILS, TransactionResponse.JSON_PROPERTY_NETWORK_RECORDS, TransactionResponse.JSON_PROPERTY_CREATED_AT, TransactionResponse.JSON_PROPERTY_LAST_UPDATED, @@ -170,6 +171,9 @@ public class TransactionResponse { public static final String JSON_PROPERTY_REQUESTED_FEE_CURRENCY = "requestedFeeCurrency"; @jakarta.annotation.Nullable private String requestedFeeCurrency; + public static final String JSON_PROPERTY_CANTON_DETAILS = "cantonDetails"; + @jakarta.annotation.Nullable private CantonDetails cantonDetails; + public static final String JSON_PROPERTY_NETWORK_RECORDS = "networkRecords"; @jakarta.annotation.Nullable private List networkRecords; @@ -954,6 +958,30 @@ public void setRequestedFeeCurrency(@jakarta.annotation.Nullable String requeste this.requestedFeeCurrency = requestedFeeCurrency; } + public TransactionResponse cantonDetails( + @jakarta.annotation.Nullable CantonDetails cantonDetails) { + this.cantonDetails = cantonDetails; + return this; + } + + /** + * Get cantonDetails + * + * @return cantonDetails + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CANTON_DETAILS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CantonDetails getCantonDetails() { + return cantonDetails; + } + + @JsonProperty(JSON_PROPERTY_CANTON_DETAILS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCantonDetails(@jakarta.annotation.Nullable CantonDetails cantonDetails) { + this.cantonDetails = cantonDetails; + } + public TransactionResponse networkRecords( @jakarta.annotation.Nullable List networkRecords) { this.networkRecords = networkRecords; @@ -1974,6 +2002,7 @@ public boolean equals(Object o) { && Objects.equals(this.feeCurrency, transactionResponse.feeCurrency) && Objects.equals( this.requestedFeeCurrency, transactionResponse.requestedFeeCurrency) + && Objects.equals(this.cantonDetails, transactionResponse.cantonDetails) && Objects.equals(this.networkRecords, transactionResponse.networkRecords) && Objects.equals(this.createdAt, transactionResponse.createdAt) && Objects.equals(this.lastUpdated, transactionResponse.lastUpdated) @@ -2043,6 +2072,7 @@ public int hashCode() { feeInfo, feeCurrency, requestedFeeCurrency, + cantonDetails, networkRecords, createdAt, lastUpdated, @@ -2124,6 +2154,7 @@ public String toString() { sb.append(" requestedFeeCurrency: ") .append(toIndentedString(requestedFeeCurrency)) .append("\n"); + sb.append(" cantonDetails: ").append(toIndentedString(cantonDetails)).append("\n"); sb.append(" networkRecords: ").append(toIndentedString(networkRecords)).append("\n"); sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); sb.append(" lastUpdated: ").append(toIndentedString(lastUpdated)).append("\n"); @@ -2465,6 +2496,11 @@ public String toUrlQueryString(String prefix) { ApiClient.valueToString(getRequestedFeeCurrency())))); } + // add `cantonDetails` to the URL query string + if (getCantonDetails() != null) { + joiner.add(getCantonDetails().toUrlQueryString(prefix + "cantonDetails" + suffix)); + } + // add `networkRecords` to the URL query string if (getNetworkRecords() != null) { for (int i = 0; i < getNetworkRecords().size(); i++) { diff --git a/src/main/java/com/fireblocks/sdk/model/TravelRuleIssuers.java b/src/main/java/com/fireblocks/sdk/model/TravelRuleIssuers.java index a5dc7cb5..30d4dbd7 100644 --- a/src/main/java/com/fireblocks/sdk/model/TravelRuleIssuers.java +++ b/src/main/java/com/fireblocks/sdk/model/TravelRuleIssuers.java @@ -48,13 +48,13 @@ public class TravelRuleIssuers { @jakarta.annotation.Nonnull private TravelRuleIssuer isRegulated; public static final String JSON_PROPERTY_REGULATORY_AUTHORITIES = "regulatoryAuthorities"; - @jakarta.annotation.Nonnull private TravelRuleIssuer regulatoryAuthorities; + @jakarta.annotation.Nullable private TravelRuleIssuer regulatoryAuthorities; public static final String JSON_PROPERTY_NAME = "name"; @jakarta.annotation.Nonnull private TravelRuleIssuer name; public static final String JSON_PROPERTY_LOGO = "logo"; - @jakarta.annotation.Nonnull private TravelRuleIssuer logo; + @jakarta.annotation.Nullable private TravelRuleIssuer logo; public static final String JSON_PROPERTY_WEBSITE = "website"; @jakarta.annotation.Nonnull private TravelRuleIssuer website; @@ -81,7 +81,7 @@ public class TravelRuleIssuers { @jakarta.annotation.Nonnull private TravelRuleIssuer country; public static final String JSON_PROPERTY_DESCRIPTION = "description"; - @jakarta.annotation.Nonnull private TravelRuleIssuer description; + @jakarta.annotation.Nullable private TravelRuleIssuer description; public TravelRuleIssuers() {} @@ -91,10 +91,7 @@ public TravelRuleIssuers( TravelRuleIssuer yearFounded, @JsonProperty(value = JSON_PROPERTY_IS_REGULATED, required = true) TravelRuleIssuer isRegulated, - @JsonProperty(value = JSON_PROPERTY_REGULATORY_AUTHORITIES, required = true) - TravelRuleIssuer regulatoryAuthorities, @JsonProperty(value = JSON_PROPERTY_NAME, required = true) TravelRuleIssuer name, - @JsonProperty(value = JSON_PROPERTY_LOGO, required = true) TravelRuleIssuer logo, @JsonProperty(value = JSON_PROPERTY_WEBSITE, required = true) TravelRuleIssuer website, @JsonProperty(value = JSON_PROPERTY_LEGAL_NAME, required = true) TravelRuleIssuer legalName, @@ -107,14 +104,11 @@ public TravelRuleIssuers( @JsonProperty(value = JSON_PROPERTY_ADDRESS_LINE1, required = true) TravelRuleIssuer addressLine1, @JsonProperty(value = JSON_PROPERTY_CITY, required = true) TravelRuleIssuer city, - @JsonProperty(value = JSON_PROPERTY_COUNTRY, required = true) TravelRuleIssuer country, - @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = true) - TravelRuleIssuer description) { + @JsonProperty(value = JSON_PROPERTY_COUNTRY, required = true) + TravelRuleIssuer country) { this.yearFounded = yearFounded; this.isRegulated = isRegulated; - this.regulatoryAuthorities = regulatoryAuthorities; this.name = name; - this.logo = logo; this.website = website; this.legalName = legalName; this.legalStructure = legalStructure; @@ -123,7 +117,6 @@ public TravelRuleIssuers( this.addressLine1 = addressLine1; this.city = city; this.country = country; - this.description = description; } public TravelRuleIssuers yearFounded(@jakarta.annotation.Nonnull TravelRuleIssuer yearFounded) { @@ -173,7 +166,7 @@ public void setIsRegulated(@jakarta.annotation.Nonnull TravelRuleIssuer isRegula } public TravelRuleIssuers regulatoryAuthorities( - @jakarta.annotation.Nonnull TravelRuleIssuer regulatoryAuthorities) { + @jakarta.annotation.Nullable TravelRuleIssuer regulatoryAuthorities) { this.regulatoryAuthorities = regulatoryAuthorities; return this; } @@ -183,17 +176,17 @@ public TravelRuleIssuers regulatoryAuthorities( * * @return regulatoryAuthorities */ - @jakarta.annotation.Nonnull + @jakarta.annotation.Nullable @JsonProperty(JSON_PROPERTY_REGULATORY_AUTHORITIES) - @JsonInclude(value = JsonInclude.Include.ALWAYS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) public TravelRuleIssuer getRegulatoryAuthorities() { return regulatoryAuthorities; } @JsonProperty(JSON_PROPERTY_REGULATORY_AUTHORITIES) - @JsonInclude(value = JsonInclude.Include.ALWAYS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) public void setRegulatoryAuthorities( - @jakarta.annotation.Nonnull TravelRuleIssuer regulatoryAuthorities) { + @jakarta.annotation.Nullable TravelRuleIssuer regulatoryAuthorities) { this.regulatoryAuthorities = regulatoryAuthorities; } @@ -220,7 +213,7 @@ public void setName(@jakarta.annotation.Nonnull TravelRuleIssuer name) { this.name = name; } - public TravelRuleIssuers logo(@jakarta.annotation.Nonnull TravelRuleIssuer logo) { + public TravelRuleIssuers logo(@jakarta.annotation.Nullable TravelRuleIssuer logo) { this.logo = logo; return this; } @@ -230,16 +223,16 @@ public TravelRuleIssuers logo(@jakarta.annotation.Nonnull TravelRuleIssuer logo) * * @return logo */ - @jakarta.annotation.Nonnull + @jakarta.annotation.Nullable @JsonProperty(JSON_PROPERTY_LOGO) - @JsonInclude(value = JsonInclude.Include.ALWAYS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) public TravelRuleIssuer getLogo() { return logo; } @JsonProperty(JSON_PROPERTY_LOGO) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setLogo(@jakarta.annotation.Nonnull TravelRuleIssuer logo) { + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setLogo(@jakarta.annotation.Nullable TravelRuleIssuer logo) { this.logo = logo; } @@ -432,7 +425,8 @@ public void setCountry(@jakarta.annotation.Nonnull TravelRuleIssuer country) { this.country = country; } - public TravelRuleIssuers description(@jakarta.annotation.Nonnull TravelRuleIssuer description) { + public TravelRuleIssuers description( + @jakarta.annotation.Nullable TravelRuleIssuer description) { this.description = description; return this; } @@ -442,16 +436,16 @@ public TravelRuleIssuers description(@jakarta.annotation.Nonnull TravelRuleIssue * * @return description */ - @jakarta.annotation.Nonnull + @jakarta.annotation.Nullable @JsonProperty(JSON_PROPERTY_DESCRIPTION) - @JsonInclude(value = JsonInclude.Include.ALWAYS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) public TravelRuleIssuer getDescription() { return description; } @JsonProperty(JSON_PROPERTY_DESCRIPTION) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setDescription(@jakarta.annotation.Nonnull TravelRuleIssuer description) { + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@jakarta.annotation.Nullable TravelRuleIssuer description) { this.description = description; } diff --git a/src/main/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequest.java b/src/main/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequest.java new file mode 100644 index 00000000..36cc80df --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequest.java @@ -0,0 +1,185 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** At least one property must be provided. */ +@JsonPropertyOrder({ + UpdateWebhookMtlsConfigRequest.JSON_PROPERTY_NAME, + UpdateWebhookMtlsConfigRequest.JSON_PROPERTY_SIGNED_CERT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class UpdateWebhookMtlsConfigRequest { + public static final String JSON_PROPERTY_NAME = "name"; + @jakarta.annotation.Nullable private String name; + + public static final String JSON_PROPERTY_SIGNED_CERT = "signedCert"; + @jakarta.annotation.Nullable private String signedCert; + + public UpdateWebhookMtlsConfigRequest() {} + + public UpdateWebhookMtlsConfigRequest name(@jakarta.annotation.Nullable String name) { + this.name = name; + return this; + } + + /** + * A new label for this mTLS configuration, or `null` to remove it. Letters, digits + * and spaces only. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(@jakarta.annotation.Nullable String name) { + this.name = name; + } + + public UpdateWebhookMtlsConfigRequest signedCert( + @jakarta.annotation.Nullable String signedCert) { + this.signedCert = signedCert; + return this; + } + + /** + * A replacement signed certificate PEM. Every webhook and OAuth credentials set using this + * configuration switches to it, and the private key it was issued for is re-derived from the + * certificate. + * + * @return signedCert + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getSignedCert() { + return signedCert; + } + + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSignedCert(@jakarta.annotation.Nullable String signedCert) { + this.signedCert = signedCert; + } + + /** Return true if this UpdateWebhookMtlsConfigRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UpdateWebhookMtlsConfigRequest updateWebhookMtlsConfigRequest = + (UpdateWebhookMtlsConfigRequest) o; + return Objects.equals(this.name, updateWebhookMtlsConfigRequest.name) + && Objects.equals(this.signedCert, updateWebhookMtlsConfigRequest.signedCert); + } + + @Override + public int hashCode() { + return Objects.hash(name, signedCert); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UpdateWebhookMtlsConfigRequest {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" signedCert: ").append(toIndentedString(signedCert)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `name` to the URL query string + if (getName() != null) { + joiner.add( + String.format( + "%sname%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `signedCert` to the URL query string + if (getSignedCert() != null) { + joiner.add( + String.format( + "%ssignedCert%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getSignedCert())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequest.java b/src/main/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequest.java index d581a264..ac568f98 100644 --- a/src/main/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequest.java +++ b/src/main/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequest.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.Objects; import java.util.StringJoiner; +import java.util.UUID; /** * A partial update. Every field is optional and an omitted field is left as it is, so `{ @@ -29,7 +30,7 @@ * maps merge. A key with a value is upserted, a key with `null` is deleted, a key you * leave out is untouched, and the whole field set to `null` clears the map. There is no * ambiguity between the two uses of `null` — one names an entry, the other names the - * field. `mtlsClientSignedCert` is a scalar, so `null` there removes it. + * field. `webhookMtlsId` is a scalar, so `null` there removes it. */ @JsonPropertyOrder({ UpdateWebhookOauthRequest.JSON_PROPERTY_NAME, @@ -40,7 +41,7 @@ UpdateWebhookOauthRequest.JSON_PROPERTY_CUSTOM_JWT_CLAIMS, UpdateWebhookOauthRequest.JSON_PROPERTY_CUSTOM_BODY_PARAMS, UpdateWebhookOauthRequest.JSON_PROPERTY_CUSTOM_HEADERS, - UpdateWebhookOauthRequest.JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT + UpdateWebhookOauthRequest.JSON_PROPERTY_WEBHOOK_MTLS_ID }) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", @@ -70,8 +71,8 @@ public class UpdateWebhookOauthRequest { public static final String JSON_PROPERTY_CUSTOM_HEADERS = "customHeaders"; @jakarta.annotation.Nullable private Map customHeaders; - public static final String JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT = "mtlsClientSignedCert"; - @jakarta.annotation.Nullable private String mtlsClientSignedCert; + public static final String JSON_PROPERTY_WEBHOOK_MTLS_ID = "webhookMtlsId"; + @jakarta.annotation.Nullable private UUID webhookMtlsId; public UpdateWebhookOauthRequest() {} @@ -325,29 +326,32 @@ public void setCustomHeaders(@jakarta.annotation.Nullable Map cu this.customHeaders = customHeaders; } - public UpdateWebhookOauthRequest mtlsClientSignedCert( - @jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public UpdateWebhookOauthRequest webhookMtlsId( + @jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; return this; } /** - * PEM-encoded client certificate for mTLS. Must be a valid X.509 certificate inside its - * validity window. Omit to leave it unchanged, or send `null` to remove it. + * The id of the mTLS configuration presented to the token endpoint, from + * `/v1/webhooks_settings/mtls`. Omit to leave it unchanged, or send `null` + * to stop using mTLS for the token request. Requires the mTLS feature to be enabled for the + * workspace (`403` otherwise), a configuration of this workspace (`404` + * otherwise), and one linked to a private key (`400` otherwise). * - * @return mtlsClientSignedCert + * @return webhookMtlsId */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public String getMtlsClientSignedCert() { - return mtlsClientSignedCert; + public UUID getWebhookMtlsId() { + return webhookMtlsId; } - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMtlsClientSignedCert(@jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public void setWebhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; } /** Return true if this UpdateWebhookOauthRequest object is equal to o. */ @@ -368,8 +372,7 @@ public boolean equals(Object o) { && Objects.equals(this.customJwtClaims, updateWebhookOauthRequest.customJwtClaims) && Objects.equals(this.customBodyParams, updateWebhookOauthRequest.customBodyParams) && Objects.equals(this.customHeaders, updateWebhookOauthRequest.customHeaders) - && Objects.equals( - this.mtlsClientSignedCert, updateWebhookOauthRequest.mtlsClientSignedCert); + && Objects.equals(this.webhookMtlsId, updateWebhookOauthRequest.webhookMtlsId); } @Override @@ -383,7 +386,7 @@ public int hashCode() { customJwtClaims, customBodyParams, customHeaders, - mtlsClientSignedCert); + webhookMtlsId); } @Override @@ -398,9 +401,7 @@ public String toString() { sb.append(" customJwtClaims: ").append(toIndentedString(customJwtClaims)).append("\n"); sb.append(" customBodyParams: ").append(toIndentedString(customBodyParams)).append("\n"); sb.append(" customHeaders: ").append(toIndentedString(customHeaders)).append("\n"); - sb.append(" mtlsClientSignedCert: ") - .append(toIndentedString(mtlsClientSignedCert)) - .append("\n"); + sb.append(" webhookMtlsId: ").append(toIndentedString(webhookMtlsId)).append("\n"); sb.append("}"); return sb.toString(); } @@ -552,15 +553,14 @@ public String toUrlQueryString(String prefix) { } } - // add `mtlsClientSignedCert` to the URL query string - if (getMtlsClientSignedCert() != null) { + // add `webhookMtlsId` to the URL query string + if (getWebhookMtlsId() != null) { joiner.add( String.format( - "%smtlsClientSignedCert%s=%s", + "%swebhookMtlsId%s=%s", prefix, suffix, - ApiClient.urlEncode( - ApiClient.valueToString(getMtlsClientSignedCert())))); + ApiClient.urlEncode(ApiClient.valueToString(getWebhookMtlsId())))); } return joiner.toString(); diff --git a/src/main/java/com/fireblocks/sdk/model/UpdateWebhookRequest.java b/src/main/java/com/fireblocks/sdk/model/UpdateWebhookRequest.java index a3a80b8f..a3c3def9 100644 --- a/src/main/java/com/fireblocks/sdk/model/UpdateWebhookRequest.java +++ b/src/main/java/com/fireblocks/sdk/model/UpdateWebhookRequest.java @@ -31,7 +31,7 @@ UpdateWebhookRequest.JSON_PROPERTY_DESCRIPTION, UpdateWebhookRequest.JSON_PROPERTY_EVENTS, UpdateWebhookRequest.JSON_PROPERTY_ENABLED, - UpdateWebhookRequest.JSON_PROPERTY_MTLS, + UpdateWebhookRequest.JSON_PROPERTY_WEBHOOK_MTLS_ID, UpdateWebhookRequest.JSON_PROPERTY_WEBHOOK_OAUTH_ID, UpdateWebhookRequest.JSON_PROPERTY_CUSTOM_HEADERS }) @@ -51,8 +51,8 @@ public class UpdateWebhookRequest { public static final String JSON_PROPERTY_ENABLED = "enabled"; @jakarta.annotation.Nullable private Boolean enabled; - public static final String JSON_PROPERTY_MTLS = "mtls"; - @jakarta.annotation.Nullable private WebhookMtls mtls; + public static final String JSON_PROPERTY_WEBHOOK_MTLS_ID = "webhookMtlsId"; + @jakarta.annotation.Nullable private UUID webhookMtlsId; public static final String JSON_PROPERTY_WEBHOOK_OAUTH_ID = "webhookOauthId"; @jakarta.annotation.Nullable private UUID webhookOauthId; @@ -162,27 +162,30 @@ public void setEnabled(@jakarta.annotation.Nullable Boolean enabled) { this.enabled = enabled; } - public UpdateWebhookRequest mtls(@jakarta.annotation.Nullable WebhookMtls mtls) { - this.mtls = mtls; + public UpdateWebhookRequest webhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; return this; } /** - * Get mtls + * The id of the mTLS configuration this webhook presents when delivering, from + * `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so + * replacing its certificate covers all of them at once. Send `null` to stop using + * mTLS for this webhook. * - * @return mtls + * @return webhookMtlsId */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_MTLS) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public WebhookMtls getMtls() { - return mtls; + public UUID getWebhookMtlsId() { + return webhookMtlsId; } - @JsonProperty(JSON_PROPERTY_MTLS) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMtls(@jakarta.annotation.Nullable WebhookMtls mtls) { - this.mtls = mtls; + public void setWebhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; } public UpdateWebhookRequest webhookOauthId(@jakarta.annotation.Nullable UUID webhookOauthId) { @@ -269,14 +272,15 @@ public boolean equals(Object o) { && Objects.equals(this.description, updateWebhookRequest.description) && Objects.equals(this.events, updateWebhookRequest.events) && Objects.equals(this.enabled, updateWebhookRequest.enabled) - && Objects.equals(this.mtls, updateWebhookRequest.mtls) + && Objects.equals(this.webhookMtlsId, updateWebhookRequest.webhookMtlsId) && Objects.equals(this.webhookOauthId, updateWebhookRequest.webhookOauthId) && Objects.equals(this.customHeaders, updateWebhookRequest.customHeaders); } @Override public int hashCode() { - return Objects.hash(url, description, events, enabled, mtls, webhookOauthId, customHeaders); + return Objects.hash( + url, description, events, enabled, webhookMtlsId, webhookOauthId, customHeaders); } @Override @@ -287,7 +291,7 @@ public String toString() { sb.append(" description: ").append(toIndentedString(description)).append("\n"); sb.append(" events: ").append(toIndentedString(events)).append("\n"); sb.append(" enabled: ").append(toIndentedString(enabled)).append("\n"); - sb.append(" mtls: ").append(toIndentedString(mtls)).append("\n"); + sb.append(" webhookMtlsId: ").append(toIndentedString(webhookMtlsId)).append("\n"); sb.append(" webhookOauthId: ").append(toIndentedString(webhookOauthId)).append("\n"); sb.append(" customHeaders: ").append(toIndentedString(customHeaders)).append("\n"); sb.append("}"); @@ -386,9 +390,14 @@ public String toUrlQueryString(String prefix) { ApiClient.urlEncode(ApiClient.valueToString(getEnabled())))); } - // add `mtls` to the URL query string - if (getMtls() != null) { - joiner.add(getMtls().toUrlQueryString(prefix + "mtls" + suffix)); + // add `webhookMtlsId` to the URL query string + if (getWebhookMtlsId() != null) { + joiner.add( + String.format( + "%swebhookMtlsId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getWebhookMtlsId())))); } // add `webhookOauthId` to the URL query string diff --git a/src/main/java/com/fireblocks/sdk/model/WebhookMtls.java b/src/main/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequest.java similarity index 63% rename from src/main/java/com/fireblocks/sdk/model/WebhookMtls.java rename to src/main/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequest.java index 97747c75..e7031053 100644 --- a/src/main/java/com/fireblocks/sdk/model/WebhookMtls.java +++ b/src/main/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequest.java @@ -21,51 +21,49 @@ import java.util.Objects; import java.util.StringJoiner; -/** - * mTLS configuration for the webhook. On responses, present only when a signed client certificate - * is set. On requests, provide a signed client certificate to enable mTLS, or null to remove it. - */ -@JsonPropertyOrder({WebhookMtls.JSON_PROPERTY_CLIENT_SIGNED_CERT}) +/** UpsertUtxoSelectionConfigRequest */ +@JsonPropertyOrder({UpsertUtxoSelectionConfigRequest.JSON_PROPERTY_STRATEGY}) @jakarta.annotation.Generated( value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.14.0") -public class WebhookMtls { - public static final String JSON_PROPERTY_CLIENT_SIGNED_CERT = "clientSignedCert"; - @jakarta.annotation.Nonnull private String clientSignedCert; +public class UpsertUtxoSelectionConfigRequest { + public static final String JSON_PROPERTY_STRATEGY = "strategy"; + @jakarta.annotation.Nonnull private UtxoSelectionStrategyEnum strategy; - public WebhookMtls() {} + public UpsertUtxoSelectionConfigRequest() {} @JsonCreator - public WebhookMtls( - @JsonProperty(value = JSON_PROPERTY_CLIENT_SIGNED_CERT, required = true) - String clientSignedCert) { - this.clientSignedCert = clientSignedCert; + public UpsertUtxoSelectionConfigRequest( + @JsonProperty(value = JSON_PROPERTY_STRATEGY, required = true) + UtxoSelectionStrategyEnum strategy) { + this.strategy = strategy; } - public WebhookMtls clientSignedCert(@jakarta.annotation.Nonnull String clientSignedCert) { - this.clientSignedCert = clientSignedCert; + public UpsertUtxoSelectionConfigRequest strategy( + @jakarta.annotation.Nonnull UtxoSelectionStrategyEnum strategy) { + this.strategy = strategy; return this; } /** - * Signed client certificate PEM used for mTLS when delivering notifications. + * Get strategy * - * @return clientSignedCert + * @return strategy */ @jakarta.annotation.Nonnull - @JsonProperty(JSON_PROPERTY_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_STRATEGY) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public String getClientSignedCert() { - return clientSignedCert; + public UtxoSelectionStrategyEnum getStrategy() { + return strategy; } - @JsonProperty(JSON_PROPERTY_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_STRATEGY) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public void setClientSignedCert(@jakarta.annotation.Nonnull String clientSignedCert) { - this.clientSignedCert = clientSignedCert; + public void setStrategy(@jakarta.annotation.Nonnull UtxoSelectionStrategyEnum strategy) { + this.strategy = strategy; } - /** Return true if this WebhookMtls object is equal to o. */ + /** Return true if this UpsertUtxoSelectionConfigRequest object is equal to o. */ @Override public boolean equals(Object o) { if (this == o) { @@ -74,20 +72,21 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - WebhookMtls webhookMtls = (WebhookMtls) o; - return Objects.equals(this.clientSignedCert, webhookMtls.clientSignedCert); + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest = + (UpsertUtxoSelectionConfigRequest) o; + return Objects.equals(this.strategy, upsertUtxoSelectionConfigRequest.strategy); } @Override public int hashCode() { - return Objects.hash(clientSignedCert); + return Objects.hash(strategy); } @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class WebhookMtls {\n"); - sb.append(" clientSignedCert: ").append(toIndentedString(clientSignedCert)).append("\n"); + sb.append("class UpsertUtxoSelectionConfigRequest {\n"); + sb.append(" strategy: ").append(toIndentedString(strategy)).append("\n"); sb.append("}"); return sb.toString(); } @@ -135,14 +134,14 @@ public String toUrlQueryString(String prefix) { StringJoiner joiner = new StringJoiner("&"); - // add `clientSignedCert` to the URL query string - if (getClientSignedCert() != null) { + // add `strategy` to the URL query string + if (getStrategy() != null) { joiner.add( String.format( - "%sclientSignedCert%s=%s", + "%sstrategy%s=%s", prefix, suffix, - ApiClient.urlEncode(ApiClient.valueToString(getClientSignedCert())))); + ApiClient.urlEncode(ApiClient.valueToString(getStrategy())))); } return joiner.toString(); diff --git a/src/main/java/com/fireblocks/sdk/model/UtxoIdentifier.java b/src/main/java/com/fireblocks/sdk/model/UtxoIdentifier.java index 97a5f338..e59245be 100644 --- a/src/main/java/com/fireblocks/sdk/model/UtxoIdentifier.java +++ b/src/main/java/com/fireblocks/sdk/model/UtxoIdentifier.java @@ -73,7 +73,8 @@ public UtxoIdentifier txHash(@jakarta.annotation.Nullable String txHash) { } /** - * On-chain transaction hash + * On-chain transaction hash, in lowercase hex as the chain reports it. Matched + * case-sensitively, so an uppercase hash is never found. * * @return txHash */ diff --git a/src/main/java/com/fireblocks/sdk/model/UtxoLabelFailure.java b/src/main/java/com/fireblocks/sdk/model/UtxoLabelFailure.java new file mode 100644 index 00000000..07c0eaf8 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/UtxoLabelFailure.java @@ -0,0 +1,309 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * A requested identifier that blocked the label request, with the reason it could not be labelled. + */ +@JsonPropertyOrder({ + UtxoLabelFailure.JSON_PROPERTY_IDENTIFIER, + UtxoLabelFailure.JSON_PROPERTY_REASON, + UtxoLabelFailure.JSON_PROPERTY_UTXO_STATUS +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class UtxoLabelFailure { + public static final String JSON_PROPERTY_IDENTIFIER = "identifier"; + @jakarta.annotation.Nonnull private UtxoIdentifier identifier; + + /** + * Why the identifier could not be labelled: - `NOT_FOUND` — no UTXO for it in this + * vault and asset. Retrying can work once it is indexed. - `NOT_LABELLABLE` — the + * UTXO exists but can no longer be labelled (spent, or removed; for a transaction ID, every + * output). Retrying will not help. + */ + public enum ReasonEnum { + NOT_FOUND(String.valueOf("NOT_FOUND")), + + NOT_LABELLABLE(String.valueOf("NOT_LABELLABLE")), + + UNUSABLE_IDENTIFIER(String.valueOf("UNUSABLE_IDENTIFIER")); + + private String value; + + ReasonEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static ReasonEnum fromValue(String value) { + for (ReasonEnum b : ReasonEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_REASON = "reason"; + @jakarta.annotation.Nonnull private ReasonEnum reason; + + /** + * The UTXO status behind the reason, when one explains it. With `NOT_FOUND`, + * `REMOVED` means the UTXO was removed within the last hour and may still reappear; + * if it does not, the same request returns `NOT_LABELLABLE` after about an hour. + */ + public enum UtxoStatusEnum { + SPENT(String.valueOf("SPENT")), + + REMOVED(String.valueOf("REMOVED")); + + private String value; + + UtxoStatusEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static UtxoStatusEnum fromValue(String value) { + for (UtxoStatusEnum b : UtxoStatusEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_UTXO_STATUS = "utxoStatus"; + @jakarta.annotation.Nullable private UtxoStatusEnum utxoStatus; + + public UtxoLabelFailure() {} + + @JsonCreator + public UtxoLabelFailure( + @JsonProperty(value = JSON_PROPERTY_IDENTIFIER, required = true) + UtxoIdentifier identifier, + @JsonProperty(value = JSON_PROPERTY_REASON, required = true) ReasonEnum reason) { + this.identifier = identifier; + this.reason = reason; + } + + public UtxoLabelFailure identifier(@jakarta.annotation.Nonnull UtxoIdentifier identifier) { + this.identifier = identifier; + return this; + } + + /** + * The identifier exactly as it was sent in the request. + * + * @return identifier + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_IDENTIFIER) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UtxoIdentifier getIdentifier() { + return identifier; + } + + @JsonProperty(JSON_PROPERTY_IDENTIFIER) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setIdentifier(@jakarta.annotation.Nonnull UtxoIdentifier identifier) { + this.identifier = identifier; + } + + public UtxoLabelFailure reason(@jakarta.annotation.Nonnull ReasonEnum reason) { + this.reason = reason; + return this; + } + + /** + * Why the identifier could not be labelled: - `NOT_FOUND` — no UTXO for it in this + * vault and asset. Retrying can work once it is indexed. - `NOT_LABELLABLE` — the + * UTXO exists but can no longer be labelled (spent, or removed; for a transaction ID, every + * output). Retrying will not help. + * + * @return reason + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_REASON) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ReasonEnum getReason() { + return reason; + } + + @JsonProperty(JSON_PROPERTY_REASON) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setReason(@jakarta.annotation.Nonnull ReasonEnum reason) { + this.reason = reason; + } + + public UtxoLabelFailure utxoStatus(@jakarta.annotation.Nullable UtxoStatusEnum utxoStatus) { + this.utxoStatus = utxoStatus; + return this; + } + + /** + * The UTXO status behind the reason, when one explains it. With `NOT_FOUND`, + * `REMOVED` means the UTXO was removed within the last hour and may still reappear; + * if it does not, the same request returns `NOT_LABELLABLE` after about an hour. + * + * @return utxoStatus + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_UTXO_STATUS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UtxoStatusEnum getUtxoStatus() { + return utxoStatus; + } + + @JsonProperty(JSON_PROPERTY_UTXO_STATUS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUtxoStatus(@jakarta.annotation.Nullable UtxoStatusEnum utxoStatus) { + this.utxoStatus = utxoStatus; + } + + /** Return true if this UtxoLabelFailure object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UtxoLabelFailure utxoLabelFailure = (UtxoLabelFailure) o; + return Objects.equals(this.identifier, utxoLabelFailure.identifier) + && Objects.equals(this.reason, utxoLabelFailure.reason) + && Objects.equals(this.utxoStatus, utxoLabelFailure.utxoStatus); + } + + @Override + public int hashCode() { + return Objects.hash(identifier, reason, utxoStatus); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UtxoLabelFailure {\n"); + sb.append(" identifier: ").append(toIndentedString(identifier)).append("\n"); + sb.append(" reason: ").append(toIndentedString(reason)).append("\n"); + sb.append(" utxoStatus: ").append(toIndentedString(utxoStatus)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `identifier` to the URL query string + if (getIdentifier() != null) { + joiner.add(getIdentifier().toUrlQueryString(prefix + "identifier" + suffix)); + } + + // add `reason` to the URL query string + if (getReason() != null) { + joiner.add( + String.format( + "%sreason%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getReason())))); + } + + // add `utxoStatus` to the URL query string + if (getUtxoStatus() != null) { + joiner.add( + String.format( + "%sutxoStatus%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getUtxoStatus())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponse.java b/src/main/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponse.java new file mode 100644 index 00000000..71a9f95d --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponse.java @@ -0,0 +1,217 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Returned when a label request is rejected. The request is all-or-nothing, so no UTXO was + * labelled. + */ +@JsonPropertyOrder({ + UtxoLabelsErrorResponse.JSON_PROPERTY_MESSAGE, + UtxoLabelsErrorResponse.JSON_PROPERTY_FAILURES +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class UtxoLabelsErrorResponse { + public static final String JSON_PROPERTY_MESSAGE = "message"; + @jakarta.annotation.Nonnull private String message; + + public static final String JSON_PROPERTY_FAILURES = "failures"; + @jakarta.annotation.Nullable private List failures; + + public UtxoLabelsErrorResponse() {} + + @JsonCreator + public UtxoLabelsErrorResponse( + @JsonProperty(value = JSON_PROPERTY_MESSAGE, required = true) String message) { + this.message = message; + } + + public UtxoLabelsErrorResponse message(@jakarta.annotation.Nonnull String message) { + this.message = message; + return this; + } + + /** + * Summary of the rejection. When `failures` is present, it names the identifiers that + * blocked the request. + * + * @return message + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getMessage() { + return message; + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setMessage(@jakarta.annotation.Nonnull String message) { + this.message = message; + } + + public UtxoLabelsErrorResponse failures( + @jakarta.annotation.Nullable List failures) { + this.failures = failures; + return this; + } + + public UtxoLabelsErrorResponse addFailuresItem(UtxoLabelFailure failuresItem) { + if (this.failures == null) { + this.failures = new ArrayList<>(); + } + this.failures.add(failuresItem); + return this; + } + + /** + * Every identifier that blocked the request, each with its own reason. Identifiers not listed + * were valid; resend them without the failed ones. Absent when the request itself was invalid + * (e.g. a malformed label). + * + * @return failures + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_FAILURES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getFailures() { + return failures; + } + + @JsonProperty(JSON_PROPERTY_FAILURES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setFailures(@jakarta.annotation.Nullable List failures) { + this.failures = failures; + } + + /** Return true if this UtxoLabelsErrorResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UtxoLabelsErrorResponse utxoLabelsErrorResponse = (UtxoLabelsErrorResponse) o; + return Objects.equals(this.message, utxoLabelsErrorResponse.message) + && Objects.equals(this.failures, utxoLabelsErrorResponse.failures); + } + + @Override + public int hashCode() { + return Objects.hash(message, failures); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UtxoLabelsErrorResponse {\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append(" failures: ").append(toIndentedString(failures)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `message` to the URL query string + if (getMessage() != null) { + joiner.add( + String.format( + "%smessage%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getMessage())))); + } + + // add `failures` to the URL query string + if (getFailures() != null) { + for (int i = 0; i < getFailures().size(); i++) { + if (getFailures().get(i) != null) { + joiner.add( + getFailures() + .get(i) + .toUrlQueryString( + String.format( + "%sfailures%s%s", + prefix, + suffix, + "".equals(suffix) + ? "" + : String.format( + "%s%d%s", + containerPrefix, + i, + containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntry.java b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntry.java new file mode 100644 index 00000000..c9b5bb38 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntry.java @@ -0,0 +1,197 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.time.OffsetDateTime; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * Config row stored at exactly the requested scope. Omitted from the parent object when none + * exists; the server does not emit JSON `null`. + */ +@JsonPropertyOrder({ + UtxoSelectionConfigEntry.JSON_PROPERTY_STRATEGY, + UtxoSelectionConfigEntry.JSON_PROPERTY_UPDATED_AT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class UtxoSelectionConfigEntry { + public static final String JSON_PROPERTY_STRATEGY = "strategy"; + @jakarta.annotation.Nonnull private UtxoSelectionStrategyEnum strategy; + + public static final String JSON_PROPERTY_UPDATED_AT = "updatedAt"; + @jakarta.annotation.Nonnull private OffsetDateTime updatedAt; + + public UtxoSelectionConfigEntry() {} + + @JsonCreator + public UtxoSelectionConfigEntry( + @JsonProperty(value = JSON_PROPERTY_STRATEGY, required = true) + UtxoSelectionStrategyEnum strategy, + @JsonProperty(value = JSON_PROPERTY_UPDATED_AT, required = true) + OffsetDateTime updatedAt) { + this.strategy = strategy; + this.updatedAt = updatedAt; + } + + public UtxoSelectionConfigEntry strategy( + @jakarta.annotation.Nonnull UtxoSelectionStrategyEnum strategy) { + this.strategy = strategy; + return this; + } + + /** + * Get strategy + * + * @return strategy + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_STRATEGY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UtxoSelectionStrategyEnum getStrategy() { + return strategy; + } + + @JsonProperty(JSON_PROPERTY_STRATEGY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setStrategy(@jakarta.annotation.Nonnull UtxoSelectionStrategyEnum strategy) { + this.strategy = strategy; + } + + public UtxoSelectionConfigEntry updatedAt( + @jakarta.annotation.Nonnull OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + return this; + } + + /** + * Time at which this configured row was last updated. + * + * @return updatedAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OffsetDateTime getUpdatedAt() { + return updatedAt; + } + + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setUpdatedAt(@jakarta.annotation.Nonnull OffsetDateTime updatedAt) { + this.updatedAt = updatedAt; + } + + /** Return true if this UtxoSelectionConfigEntry object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UtxoSelectionConfigEntry utxoSelectionConfigEntry = (UtxoSelectionConfigEntry) o; + return Objects.equals(this.strategy, utxoSelectionConfigEntry.strategy) + && Objects.equals(this.updatedAt, utxoSelectionConfigEntry.updatedAt); + } + + @Override + public int hashCode() { + return Objects.hash(strategy, updatedAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UtxoSelectionConfigEntry {\n"); + sb.append(" strategy: ").append(toIndentedString(strategy)).append("\n"); + sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `strategy` to the URL query string + if (getStrategy() != null) { + joiner.add( + String.format( + "%sstrategy%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getStrategy())))); + } + + // add `updatedAt` to the URL query string + if (getUpdatedAt() != null) { + joiner.add( + String.format( + "%supdatedAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getUpdatedAt())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponse.java b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponse.java new file mode 100644 index 00000000..8f999376 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponse.java @@ -0,0 +1,183 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.Objects; +import java.util.StringJoiner; + +/** + * `effective` is always present. `configured` is omitted when no row is stored + * at the requested scope (the server does not emit `\"configured\": null`). PUT + * responses always include `configured`. + */ +@JsonPropertyOrder({ + UtxoSelectionConfigResponse.JSON_PROPERTY_CONFIGURED, + UtxoSelectionConfigResponse.JSON_PROPERTY_EFFECTIVE +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class UtxoSelectionConfigResponse { + public static final String JSON_PROPERTY_CONFIGURED = "configured"; + @jakarta.annotation.Nullable private UtxoSelectionConfigEntry configured; + + public static final String JSON_PROPERTY_EFFECTIVE = "effective"; + @jakarta.annotation.Nonnull private EffectiveUtxoSelectionConfig effective; + + public UtxoSelectionConfigResponse() {} + + @JsonCreator + public UtxoSelectionConfigResponse( + @JsonProperty(value = JSON_PROPERTY_EFFECTIVE, required = true) + EffectiveUtxoSelectionConfig effective) { + this.effective = effective; + } + + public UtxoSelectionConfigResponse configured( + @jakarta.annotation.Nullable UtxoSelectionConfigEntry configured) { + this.configured = configured; + return this; + } + + /** + * Get configured + * + * @return configured + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CONFIGURED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UtxoSelectionConfigEntry getConfigured() { + return configured; + } + + @JsonProperty(JSON_PROPERTY_CONFIGURED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setConfigured(@jakarta.annotation.Nullable UtxoSelectionConfigEntry configured) { + this.configured = configured; + } + + public UtxoSelectionConfigResponse effective( + @jakarta.annotation.Nonnull EffectiveUtxoSelectionConfig effective) { + this.effective = effective; + return this; + } + + /** + * Get effective + * + * @return effective + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EFFECTIVE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public EffectiveUtxoSelectionConfig getEffective() { + return effective; + } + + @JsonProperty(JSON_PROPERTY_EFFECTIVE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setEffective(@jakarta.annotation.Nonnull EffectiveUtxoSelectionConfig effective) { + this.effective = effective; + } + + /** Return true if this UtxoSelectionConfigResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UtxoSelectionConfigResponse utxoSelectionConfigResponse = (UtxoSelectionConfigResponse) o; + return Objects.equals(this.configured, utxoSelectionConfigResponse.configured) + && Objects.equals(this.effective, utxoSelectionConfigResponse.effective); + } + + @Override + public int hashCode() { + return Objects.hash(configured, effective); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UtxoSelectionConfigResponse {\n"); + sb.append(" configured: ").append(toIndentedString(configured)).append("\n"); + sb.append(" effective: ").append(toIndentedString(effective)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `configured` to the URL query string + if (getConfigured() != null) { + joiner.add(getConfigured().toUrlQueryString(prefix + "configured" + suffix)); + } + + // add `effective` to the URL query string + if (getEffective() != null) { + joiner.add(getEffective().toUrlQueryString(prefix + "effective" + suffix)); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnum.java b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnum.java new file mode 100644 index 00000000..18f6eddc --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnum.java @@ -0,0 +1,70 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Where the effective strategy was resolved from. `DEFAULT` means no stored row applies + * at this scope or any scope it inherits from - `effective.strategy` reports whichever + * strategy currently applies. `WORKSPACE` and `VAULT_ASSET` are stored rows. + */ +public enum UtxoSelectionConfigSourceEnum { + DEFAULT("DEFAULT"), + + WORKSPACE("WORKSPACE"), + + VAULT_ASSET("VAULT_ASSET"); + + private String value; + + UtxoSelectionConfigSourceEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static UtxoSelectionConfigSourceEnum fromValue(String value) { + for (UtxoSelectionConfigSourceEnum b : UtxoSelectionConfigSourceEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnum.java b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnum.java new file mode 100644 index 00000000..a3449cb1 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnum.java @@ -0,0 +1,70 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * UTXO selection strategy. `ADAPTIVE` is recommended: the engine chooses inputs at + * selection time. `ASC` spends smallest UTXOs first. `DESC` spends largest + * first. + */ +public enum UtxoSelectionStrategyEnum { + ASC("ASC"), + + DESC("DESC"), + + ADAPTIVE("ADAPTIVE"); + + private String value; + + UtxoSelectionStrategyEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static UtxoSelectionStrategyEnum fromValue(String value) { + for (UtxoSelectionStrategyEnum b : UtxoSelectionStrategyEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format("%s=%s", prefix, this.toString()); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/Webhook.java b/src/main/java/com/fireblocks/sdk/model/Webhook.java index b3972cbc..1ef62065 100644 --- a/src/main/java/com/fireblocks/sdk/model/Webhook.java +++ b/src/main/java/com/fireblocks/sdk/model/Webhook.java @@ -34,7 +34,7 @@ Webhook.JSON_PROPERTY_STATUS, Webhook.JSON_PROPERTY_CREATED_AT, Webhook.JSON_PROPERTY_UPDATED_AT, - Webhook.JSON_PROPERTY_MTLS, + Webhook.JSON_PROPERTY_WEBHOOK_MTLS_ID, Webhook.JSON_PROPERTY_WEBHOOK_OAUTH_ID, Webhook.JSON_PROPERTY_CUSTOM_HEADERS }) @@ -98,8 +98,8 @@ public static StatusEnum fromValue(String value) { public static final String JSON_PROPERTY_UPDATED_AT = "updatedAt"; @jakarta.annotation.Nonnull private Long updatedAt; - public static final String JSON_PROPERTY_MTLS = "mtls"; - @jakarta.annotation.Nullable private WebhookMtls mtls; + public static final String JSON_PROPERTY_WEBHOOK_MTLS_ID = "webhookMtlsId"; + @jakarta.annotation.Nullable private UUID webhookMtlsId; public static final String JSON_PROPERTY_WEBHOOK_OAUTH_ID = "webhookOauthId"; @jakarta.annotation.Nullable private UUID webhookOauthId; @@ -294,27 +294,28 @@ public void setUpdatedAt(@jakarta.annotation.Nonnull Long updatedAt) { this.updatedAt = updatedAt; } - public Webhook mtls(@jakarta.annotation.Nullable WebhookMtls mtls) { - this.mtls = mtls; + public Webhook webhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; return this; } /** - * Get mtls + * The id of the mTLS configuration this webhook presents when delivering, from + * `/v1/webhooks_settings/mtls`. Absent when the webhook does not use mTLS. * - * @return mtls + * @return webhookMtlsId */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_MTLS) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public WebhookMtls getMtls() { - return mtls; + public UUID getWebhookMtlsId() { + return webhookMtlsId; } - @JsonProperty(JSON_PROPERTY_MTLS) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMtls(@jakarta.annotation.Nullable WebhookMtls mtls) { - this.mtls = mtls; + public void setWebhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; } public Webhook webhookOauthId(@jakarta.annotation.Nullable UUID webhookOauthId) { @@ -390,7 +391,7 @@ public boolean equals(Object o) { && Objects.equals(this.status, webhook.status) && Objects.equals(this.createdAt, webhook.createdAt) && Objects.equals(this.updatedAt, webhook.updatedAt) - && Objects.equals(this.mtls, webhook.mtls) + && Objects.equals(this.webhookMtlsId, webhook.webhookMtlsId) && Objects.equals(this.webhookOauthId, webhook.webhookOauthId) && Objects.equals(this.customHeaders, webhook.customHeaders); } @@ -405,7 +406,7 @@ public int hashCode() { status, createdAt, updatedAt, - mtls, + webhookMtlsId, webhookOauthId, customHeaders); } @@ -421,7 +422,7 @@ public String toString() { sb.append(" status: ").append(toIndentedString(status)).append("\n"); sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); - sb.append(" mtls: ").append(toIndentedString(mtls)).append("\n"); + sb.append(" webhookMtlsId: ").append(toIndentedString(webhookMtlsId)).append("\n"); sb.append(" webhookOauthId: ").append(toIndentedString(webhookOauthId)).append("\n"); sb.append(" customHeaders: ").append(toIndentedString(customHeaders)).append("\n"); sb.append("}"); @@ -548,9 +549,14 @@ public String toUrlQueryString(String prefix) { ApiClient.urlEncode(ApiClient.valueToString(getUpdatedAt())))); } - // add `mtls` to the URL query string - if (getMtls() != null) { - joiner.add(getMtls().toUrlQueryString(prefix + "mtls" + suffix)); + // add `webhookMtlsId` to the URL query string + if (getWebhookMtlsId() != null) { + joiner.add( + String.format( + "%swebhookMtlsId%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getWebhookMtlsId())))); } // add `webhookOauthId` to the URL query string diff --git a/src/main/java/com/fireblocks/sdk/model/WebhookMtlsConfig.java b/src/main/java/com/fireblocks/sdk/model/WebhookMtlsConfig.java new file mode 100644 index 00000000..75d971a7 --- /dev/null +++ b/src/main/java/com/fireblocks/sdk/model/WebhookMtlsConfig.java @@ -0,0 +1,356 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fireblocks.sdk.ApiClient; +import java.util.Objects; +import java.util.StringJoiner; +import java.util.UUID; + +/** + * A signed client certificate stored for the workspace, and the id a webhook or OAuth credentials + * set references to use it. Several of them may share one configuration, so replacing the + * certificate here switches all of them at once. + */ +@JsonPropertyOrder({ + WebhookMtlsConfig.JSON_PROPERTY_ID, + WebhookMtlsConfig.JSON_PROPERTY_NAME, + WebhookMtlsConfig.JSON_PROPERTY_SIGNED_CERT, + WebhookMtlsConfig.JSON_PROPERTY_EXPIRES_AT, + WebhookMtlsConfig.JSON_PROPERTY_CREATED_AT, + WebhookMtlsConfig.JSON_PROPERTY_UPDATED_AT +}) +@jakarta.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + comments = "Generator version: 7.14.0") +public class WebhookMtlsConfig { + public static final String JSON_PROPERTY_ID = "id"; + @jakarta.annotation.Nonnull private UUID id; + + public static final String JSON_PROPERTY_NAME = "name"; + @jakarta.annotation.Nullable private String name; + + public static final String JSON_PROPERTY_SIGNED_CERT = "signedCert"; + @jakarta.annotation.Nonnull private String signedCert; + + public static final String JSON_PROPERTY_EXPIRES_AT = "expiresAt"; + @jakarta.annotation.Nonnull private Long expiresAt; + + public static final String JSON_PROPERTY_CREATED_AT = "createdAt"; + @jakarta.annotation.Nonnull private Long createdAt; + + public static final String JSON_PROPERTY_UPDATED_AT = "updatedAt"; + @jakarta.annotation.Nonnull private Long updatedAt; + + public WebhookMtlsConfig() {} + + @JsonCreator + public WebhookMtlsConfig( + @JsonProperty(value = JSON_PROPERTY_ID, required = true) UUID id, + @JsonProperty(value = JSON_PROPERTY_SIGNED_CERT, required = true) String signedCert, + @JsonProperty(value = JSON_PROPERTY_EXPIRES_AT, required = true) Long expiresAt, + @JsonProperty(value = JSON_PROPERTY_CREATED_AT, required = true) Long createdAt, + @JsonProperty(value = JSON_PROPERTY_UPDATED_AT, required = true) Long updatedAt) { + this.id = id; + this.signedCert = signedCert; + this.expiresAt = expiresAt; + this.createdAt = createdAt; + this.updatedAt = updatedAt; + } + + public WebhookMtlsConfig id(@jakarta.annotation.Nonnull UUID id) { + this.id = id; + return this; + } + + /** + * The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a + * webhook or on OAuth credentials. + * + * @return id + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public UUID getId() { + return id; + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setId(@jakarta.annotation.Nonnull UUID id) { + this.id = id; + } + + public WebhookMtlsConfig name(@jakarta.annotation.Nullable String name) { + this.name = name; + return this; + } + + /** + * The label given to this mTLS configuration. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(@jakarta.annotation.Nullable String name) { + this.name = name; + } + + public WebhookMtlsConfig signedCert(@jakarta.annotation.Nonnull String signedCert) { + this.signedCert = signedCert; + return this; + } + + /** + * The signed client certificate PEM. + * + * @return signedCert + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getSignedCert() { + return signedCert; + } + + @JsonProperty(JSON_PROPERTY_SIGNED_CERT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSignedCert(@jakarta.annotation.Nonnull String signedCert) { + this.signedCert = signedCert; + } + + public WebhookMtlsConfig expiresAt(@jakarta.annotation.Nonnull Long expiresAt) { + this.expiresAt = expiresAt; + return this; + } + + /** + * When the certificate itself expires, in milliseconds since the epoch. + * + * @return expiresAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Long getExpiresAt() { + return expiresAt; + } + + @JsonProperty(JSON_PROPERTY_EXPIRES_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setExpiresAt(@jakarta.annotation.Nonnull Long expiresAt) { + this.expiresAt = expiresAt; + } + + public WebhookMtlsConfig createdAt(@jakarta.annotation.Nonnull Long createdAt) { + this.createdAt = createdAt; + return this; + } + + /** + * When the certificate was uploaded, in milliseconds since the epoch. + * + * @return createdAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Long getCreatedAt() { + return createdAt; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setCreatedAt(@jakarta.annotation.Nonnull Long createdAt) { + this.createdAt = createdAt; + } + + public WebhookMtlsConfig updatedAt(@jakarta.annotation.Nonnull Long updatedAt) { + this.updatedAt = updatedAt; + return this; + } + + /** + * When this configuration was last changed, in milliseconds since the epoch. Differs from + * createdAt once the certificate has been replaced or the configuration renamed. + * + * @return updatedAt + */ + @jakarta.annotation.Nonnull + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Long getUpdatedAt() { + return updatedAt; + } + + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setUpdatedAt(@jakarta.annotation.Nonnull Long updatedAt) { + this.updatedAt = updatedAt; + } + + /** Return true if this WebhookMtlsConfig object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + WebhookMtlsConfig webhookMtlsConfig = (WebhookMtlsConfig) o; + return Objects.equals(this.id, webhookMtlsConfig.id) + && Objects.equals(this.name, webhookMtlsConfig.name) + && Objects.equals(this.signedCert, webhookMtlsConfig.signedCert) + && Objects.equals(this.expiresAt, webhookMtlsConfig.expiresAt) + && Objects.equals(this.createdAt, webhookMtlsConfig.createdAt) + && Objects.equals(this.updatedAt, webhookMtlsConfig.updatedAt); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, signedCert, expiresAt, createdAt, updatedAt); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class WebhookMtlsConfig {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" signedCert: ").append(toIndentedString(signedCert)).append("\n"); + sb.append(" expiresAt: ").append(toIndentedString(expiresAt)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first + * line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add( + String.format( + "%sid%s=%s", + prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add( + String.format( + "%sname%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `signedCert` to the URL query string + if (getSignedCert() != null) { + joiner.add( + String.format( + "%ssignedCert%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getSignedCert())))); + } + + // add `expiresAt` to the URL query string + if (getExpiresAt() != null) { + joiner.add( + String.format( + "%sexpiresAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getExpiresAt())))); + } + + // add `createdAt` to the URL query string + if (getCreatedAt() != null) { + joiner.add( + String.format( + "%screatedAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getCreatedAt())))); + } + + // add `updatedAt` to the URL query string + if (getUpdatedAt() != null) { + joiner.add( + String.format( + "%supdatedAt%s=%s", + prefix, + suffix, + ApiClient.urlEncode(ApiClient.valueToString(getUpdatedAt())))); + } + + return joiner.toString(); + } +} diff --git a/src/main/java/com/fireblocks/sdk/model/WebhookOauthCredentials.java b/src/main/java/com/fireblocks/sdk/model/WebhookOauthCredentials.java index 9ead7874..7fc4b252 100644 --- a/src/main/java/com/fireblocks/sdk/model/WebhookOauthCredentials.java +++ b/src/main/java/com/fireblocks/sdk/model/WebhookOauthCredentials.java @@ -42,7 +42,7 @@ WebhookOauthCredentials.JSON_PROPERTY_CUSTOM_JWT_CLAIMS, WebhookOauthCredentials.JSON_PROPERTY_CUSTOM_BODY_PARAMS, WebhookOauthCredentials.JSON_PROPERTY_CUSTOM_HEADERS, - WebhookOauthCredentials.JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT, + WebhookOauthCredentials.JSON_PROPERTY_WEBHOOK_MTLS_ID, WebhookOauthCredentials.JSON_PROPERTY_CREATED_AT, WebhookOauthCredentials.JSON_PROPERTY_UPDATED_AT }) @@ -74,8 +74,8 @@ public class WebhookOauthCredentials { public static final String JSON_PROPERTY_CUSTOM_HEADERS = "customHeaders"; @jakarta.annotation.Nullable private List customHeaders; - public static final String JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT = "mtlsClientSignedCert"; - @jakarta.annotation.Nullable private String mtlsClientSignedCert; + public static final String JSON_PROPERTY_WEBHOOK_MTLS_ID = "webhookMtlsId"; + @jakarta.annotation.Nullable private UUID webhookMtlsId; public static final String JSON_PROPERTY_CREATED_AT = "createdAt"; @jakarta.annotation.Nonnull private Long createdAt; @@ -323,28 +323,29 @@ public void setCustomHeaders(@jakarta.annotation.Nullable List customHea this.customHeaders = customHeaders; } - public WebhookOauthCredentials mtlsClientSignedCert( - @jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public WebhookOauthCredentials webhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; return this; } /** - * PEM-encoded client certificate used for mTLS when fetching OAuth tokens. + * The id of the mTLS configuration presented to the token endpoint. Absent when the token + * request does not use mTLS. Read the certificate from + * `/v1/webhooks_settings/mtls/{id}`. * - * @return mtlsClientSignedCert + * @return webhookMtlsId */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public String getMtlsClientSignedCert() { - return mtlsClientSignedCert; + public UUID getWebhookMtlsId() { + return webhookMtlsId; } - @JsonProperty(JSON_PROPERTY_MTLS_CLIENT_SIGNED_CERT) + @JsonProperty(JSON_PROPERTY_WEBHOOK_MTLS_ID) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setMtlsClientSignedCert(@jakarta.annotation.Nullable String mtlsClientSignedCert) { - this.mtlsClientSignedCert = mtlsClientSignedCert; + public void setWebhookMtlsId(@jakarta.annotation.Nullable UUID webhookMtlsId) { + this.webhookMtlsId = webhookMtlsId; } public WebhookOauthCredentials createdAt(@jakarta.annotation.Nonnull Long createdAt) { @@ -411,8 +412,7 @@ public boolean equals(Object o) { && Objects.equals(this.customJwtClaims, webhookOauthCredentials.customJwtClaims) && Objects.equals(this.customBodyParams, webhookOauthCredentials.customBodyParams) && Objects.equals(this.customHeaders, webhookOauthCredentials.customHeaders) - && Objects.equals( - this.mtlsClientSignedCert, webhookOauthCredentials.mtlsClientSignedCert) + && Objects.equals(this.webhookMtlsId, webhookOauthCredentials.webhookMtlsId) && Objects.equals(this.createdAt, webhookOauthCredentials.createdAt) && Objects.equals(this.updatedAt, webhookOauthCredentials.updatedAt); } @@ -428,7 +428,7 @@ public int hashCode() { customJwtClaims, customBodyParams, customHeaders, - mtlsClientSignedCert, + webhookMtlsId, createdAt, updatedAt); } @@ -445,9 +445,7 @@ public String toString() { sb.append(" customJwtClaims: ").append(toIndentedString(customJwtClaims)).append("\n"); sb.append(" customBodyParams: ").append(toIndentedString(customBodyParams)).append("\n"); sb.append(" customHeaders: ").append(toIndentedString(customHeaders)).append("\n"); - sb.append(" mtlsClientSignedCert: ") - .append(toIndentedString(mtlsClientSignedCert)) - .append("\n"); + sb.append(" webhookMtlsId: ").append(toIndentedString(webhookMtlsId)).append("\n"); sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); sb.append("}"); @@ -596,15 +594,14 @@ public String toUrlQueryString(String prefix) { } } - // add `mtlsClientSignedCert` to the URL query string - if (getMtlsClientSignedCert() != null) { + // add `webhookMtlsId` to the URL query string + if (getWebhookMtlsId() != null) { joiner.add( String.format( - "%smtlsClientSignedCert%s=%s", + "%swebhookMtlsId%s=%s", prefix, suffix, - ApiClient.urlEncode( - ApiClient.valueToString(getMtlsClientSignedCert())))); + ApiClient.urlEncode(ApiClient.valueToString(getWebhookMtlsId())))); } // add `createdAt` to the URL query string diff --git a/src/test/java/com/fireblocks/sdk/FireblocksTest.java b/src/test/java/com/fireblocks/sdk/FireblocksTest.java index 6d6e2e23..a1737d3c 100644 --- a/src/test/java/com/fireblocks/sdk/FireblocksTest.java +++ b/src/test/java/com/fireblocks/sdk/FireblocksTest.java @@ -423,11 +423,11 @@ public void testGetComplianceScreeningConfigurationApi() { } @Test - public void testGetConnectedAccountsBetaApi() { + public void testGetConnectedAccountsApi() { setupFireblocks(true, null, null); - ConnectedAccountsBetaApi connectedAccountsBeta = fireblocks.connectedAccountsBeta(); - Assert.assertNotNull(connectedAccountsBeta); - Assert.assertSame(connectedAccountsBeta, fireblocks.connectedAccountsBeta()); + ConnectedAccountsApi connectedAccounts = fireblocks.connectedAccounts(); + Assert.assertNotNull(connectedAccounts); + Assert.assertSame(connectedAccounts, fireblocks.connectedAccounts()); } @Test diff --git a/src/test/java/com/fireblocks/sdk/api/ComplianceApiTest.java b/src/test/java/com/fireblocks/sdk/api/ComplianceApiTest.java index 9fcaa8b2..eb224f81 100644 --- a/src/test/java/com/fireblocks/sdk/api/ComplianceApiTest.java +++ b/src/test/java/com/fireblocks/sdk/api/ComplianceApiTest.java @@ -16,6 +16,8 @@ import com.fireblocks.sdk.ApiResponse; import com.fireblocks.sdk.model.AddressRegistryAddVaultOptOutsRequest; import com.fireblocks.sdk.model.AddressRegistryAddVaultOptOutsResponse; +import com.fireblocks.sdk.model.AddressRegistryCreateProofOfOwnershipRequest; +import com.fireblocks.sdk.model.AddressRegistryCreateProofOfOwnershipResponse; import com.fireblocks.sdk.model.AddressRegistryGetVaultOptOutResponse; import com.fireblocks.sdk.model.AddressRegistryLegalEntity; import com.fireblocks.sdk.model.AddressRegistryListVaultOptOutsResponse; @@ -23,6 +25,8 @@ import com.fireblocks.sdk.model.AddressRegistryRemoveVaultOptOutResponse; import com.fireblocks.sdk.model.AddressRegistryTenantRegistryResponse; import com.fireblocks.sdk.model.AddressRegistryVaultListOrder; +import com.fireblocks.sdk.model.AddressRegistryVerifyProofOfOwnershipRequest; +import com.fireblocks.sdk.model.AddressRegistryVerifyProofOfOwnershipResponse; import com.fireblocks.sdk.model.AmlVerdictManualRequest; import com.fireblocks.sdk.model.AmlVerdictManualResponse; import com.fireblocks.sdk.model.ArsConfigResponse; @@ -119,6 +123,27 @@ public void assignVaultsToLegalEntityTest() { assignVaultsToLegalEntityRequest, legalEntityId, idempotencyKey); } + /** + * Create a Proof of Ownership PDF for an address + * + *

Creates a Proof of Ownership PDF for a blockchain address owned by the authenticated + * workspace — for example, to share with a counterparty or bank as compliance evidence. + * Recipients can confirm it with `POST + * /v1/address_registry/proof_of_ownership_exports/verify`. Check + * `proofOfOwnershipAvailable` on `GET + * /v1/address_registry/legal_entities/{address}` first if you want to know whether create + * is likely to succeed. + */ + @Test + public void createAddressRegistryProofOfOwnershipTest() { + AddressRegistryCreateProofOfOwnershipRequest addressRegistryCreateProofOfOwnershipRequest = + null; + String idempotencyKey = null; + CompletableFuture> response = + api.createAddressRegistryProofOfOwnership( + addressRegistryCreateProofOfOwnershipRequest, idempotencyKey); + } + /** * Create a counterparty group * @@ -615,4 +640,22 @@ public void updateTravelRuleConfigTest() { CompletableFuture> response = api.updateTravelRuleConfig(idempotencyKey); } + + /** + * Verify a Proof of Ownership export + * + *

Verifies a Proof of Ownership export against the record Fireblocks stored at creation. + * Returns `valid: false` (not 404) for an unknown, expired, or mismatched export. + * Available to any authenticated Fireblocks workspace, not just the export's original + * owner. + */ + @Test + public void verifyAddressRegistryProofOfOwnershipTest() { + AddressRegistryVerifyProofOfOwnershipRequest addressRegistryVerifyProofOfOwnershipRequest = + null; + String idempotencyKey = null; + CompletableFuture> response = + api.verifyAddressRegistryProofOfOwnership( + addressRegistryVerifyProofOfOwnershipRequest, idempotencyKey); + } } diff --git a/src/test/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApiTest.java b/src/test/java/com/fireblocks/sdk/api/ConnectedAccountsApiTest.java similarity index 83% rename from src/test/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApiTest.java rename to src/test/java/com/fireblocks/sdk/api/ConnectedAccountsApiTest.java index 4834c503..fe925dc4 100644 --- a/src/test/java/com/fireblocks/sdk/api/ConnectedAccountsBetaApiTest.java +++ b/src/test/java/com/fireblocks/sdk/api/ConnectedAccountsApiTest.java @@ -33,11 +33,11 @@ import org.junit.Ignore; import org.junit.Test; -/** API tests for ConnectedAccountsBetaApi */ +/** API tests for ConnectedAccountsApi */ @Ignore -public class ConnectedAccountsBetaApiTest { +public class ConnectedAccountsApiTest { - private final ConnectedAccountsBetaApi api = new ConnectedAccountsBetaApi(); + private final ConnectedAccountsApi api = new ConnectedAccountsApi(); /** * Add a connected account @@ -46,8 +46,7 @@ public class ConnectedAccountsBetaApiTest { * must be a Base64-encoded RSA-encrypted credential blob. Use `GET * /connected_accounts/credentials/public_key` to retrieve the public key for encryption. * The `providerType` is derived server-side from the `providerId` — callers - * do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. **Note:** This - * endpoint is currently in beta and might be subject to changes. + * do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. */ @Test public void addConnectedAccountTest() { @@ -60,8 +59,7 @@ public void addConnectedAccountTest() { /** * Disconnect connected account * - *

Disconnect a connected account by ID. **Note**: - This endpoint is currently in beta and - * might be subject to changes. + *

Disconnect a connected account by ID. */ @Test public void disconnectConnectedAccountTest() { @@ -73,8 +71,7 @@ public void disconnectConnectedAccountTest() { /** * Get connected account * - *

Retrieve detailed information about a specific connected account by ID. **Note:** This - * endpoint is currently in beta and might be subject to changes. + *

Retrieve detailed information about a specific connected account by ID. */ @Test public void getConnectedAccountTest() { @@ -86,9 +83,8 @@ public void getConnectedAccountTest() { /** * Get allowlist for connected account * - *

Retrieves the address allowlist for a specified connected account. **Note:** This endpoint - * is currently in beta and might be subject to changes. Currently supports - * CoinbaseExchange/Binance accounts only. + *

Retrieves the address allowlist for a specified connected account. **Note:** Currently + * supports CoinbaseExchange/Binance accounts only. */ @Test public void getConnectedAccountAllowlistTest() { @@ -116,8 +112,7 @@ public void getConnectedAccountAllowlistTest() { * Get a single allowlist entry for a connected account * *

Retrieves a single allowlist entry by its Fireblocks identifier for a specified connected - * account. **Note:** This endpoint is currently in beta and might be subject to changes. - * Currently supports CoinbaseExchange/Binance accounts only. + * account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. */ @Test public void getConnectedAccountAllowlistEntryTest() { @@ -131,8 +126,7 @@ public void getConnectedAccountAllowlistEntryTest() { * Get balances for an account * *

Retrieve current asset balances for a specific connected account as a flat list (one row - * per `assetId`, `balanceType`). **Note:** This endpoint is currently in - * beta and might be subject to changes. + * per `assetId`, `balanceType`). */ @Test public void getConnectedAccountBalancesTest() { @@ -147,7 +141,7 @@ public void getConnectedAccountBalancesTest() { * Get exchange rates for an account * *

Retrieve current exchange rates for converting between specific assets in a connected - * account. **Note:** This endpoint is currently in beta and might be subject to changes. + * account. */ @Test public void getConnectedAccountRatesTest() { @@ -162,8 +156,7 @@ public void getConnectedAccountRatesTest() { * Get supported trading pairs for an account * *

Retrieve all asset trading pairs supported by a specific connected account, including the - * pair type (`quote`, `market`, `onOffRamp`). **Note:** This - * endpoint is currently in beta and might be subject to changes. + * pair type (`quote`, `market`, `onOffRamp`). */ @Test public void getConnectedAccountTradingPairsTest() { @@ -177,8 +170,7 @@ public void getConnectedAccountTradingPairsTest() { /** * Get connected accounts * - *

Returns all connected accounts. **Note:** This endpoint is currently in beta and might be - * subject to changes. + *

Returns all connected accounts. */ @Test public void getConnectedAccountsTest() { @@ -194,8 +186,7 @@ public void getConnectedAccountsTest() { * *

Returns the RSA public key used to encrypt the `creds` field before calling * `POST /connected_accounts`. The key is a singleton resource scoped to the - * connected-accounts credentials domain — there is one per tenant context. **Note:** This - * endpoint is currently in beta and might be subject to changes. + * connected-accounts credentials domain — there is one per tenant context. */ @Test public void getConnectedAccountsCredentialsPublicKeyTest() { @@ -206,8 +197,7 @@ public void getConnectedAccountsCredentialsPublicKeyTest() { /** * Rename Connected Account * - *

Rename a connected account by account ID. **Note:** This endpoint is currently in beta and - * might be subject to changes. + *

Rename a connected account by account ID. */ @Test public void renameConnectedAccountTest() { @@ -223,9 +213,8 @@ public void renameConnectedAccountTest() { * Sync allowlist for connected account * *

Triggers an on-demand sync from the exchange, bypassing the cache and fetching live data - * immediately. **Rate limit:** 1 request per minute per connected account. **Note:** This - * endpoint is currently in beta and might be subject to changes. Currently supports - * CoinbaseExchange/Binance accounts only. + * immediately. **Rate limit:** 1 request per minute per connected account. **Note:** Currently + * supports CoinbaseExchange/Binance accounts only. */ @Test public void syncConnectedAccountAllowlistTest() { @@ -247,8 +236,7 @@ public void syncConnectedAccountAllowlistTest() { * Both `creds` and `apiKey` are mandatory. Validation against the exchange * is synchronous, but the update itself is **pending mobile approval** — the existing * credentials stay live until the change is approved, so none of the affected accounts are - * disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. **Note:** This - * endpoint is currently in beta and might be subject to changes. + * disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. */ @Test public void updateConnectedAccountCredentialsTest() { diff --git a/src/test/java/com/fireblocks/sdk/api/ConsoleUserApiTest.java b/src/test/java/com/fireblocks/sdk/api/ConsoleUserApiTest.java index f8d34927..339cb490 100644 --- a/src/test/java/com/fireblocks/sdk/api/ConsoleUserApiTest.java +++ b/src/test/java/com/fireblocks/sdk/api/ConsoleUserApiTest.java @@ -14,6 +14,7 @@ import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.model.ConsoleUser; import com.fireblocks.sdk.model.CreateConsoleUser; import com.fireblocks.sdk.model.GetConsoleUsersResponse; import java.util.concurrent.CompletableFuture; @@ -43,6 +44,24 @@ public void createConsoleUserTest() { api.createConsoleUser(createConsoleUser, idempotencyKey); } + /** + * Request deletion of a console user + * + *

Requests deletion of a console user. The request is asynchronous: it goes through the + * workspace's configured \"Delete users\" approval policy (Settings > + * Quorums), exactly as deleting a user from the console does, and the user is removed only once + * that approval completes. - Track progress by polling GET /management/users; deletion is + * complete when the user is disabled. - Please note that this endpoint is available only for + * API keys with Admin/Non Signing Admin permissions. Endpoint Permission: Admin, Non-Signing + * Admin. **Note:** This endpoint is currently in beta and might be subject to changes. + */ + @Test + public void deleteConsoleUserTest() { + String id = null; + Boolean force = null; + CompletableFuture> response = api.deleteConsoleUser(id, force); + } + /** * Get console users * diff --git a/src/test/java/com/fireblocks/sdk/api/UtxoManagementBetaApiTest.java b/src/test/java/com/fireblocks/sdk/api/UtxoManagementBetaApiTest.java index 02d6e178..74b94104 100644 --- a/src/test/java/com/fireblocks/sdk/api/UtxoManagementBetaApiTest.java +++ b/src/test/java/com/fireblocks/sdk/api/UtxoManagementBetaApiTest.java @@ -17,6 +17,8 @@ import com.fireblocks.sdk.model.AttachDetachUtxoLabelsRequest; import com.fireblocks.sdk.model.AttachDetachUtxoLabelsResponse; import com.fireblocks.sdk.model.ListUtxosResponse; +import com.fireblocks.sdk.model.UpsertUtxoSelectionConfigRequest; +import com.fireblocks.sdk.model.UtxoSelectionConfigResponse; import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -29,6 +31,22 @@ public class UtxoManagementBetaApiTest { private final UtxoManagementBetaApi api = new UtxoManagementBetaApi(); + /** + * Get UTXO selection config + * + *

Returns the workspace-level configured selection strategy and the effective strategy after + * runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored + * (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive + * selection is serving for this workspace, otherwise `ASC`. **Note:** These endpoints + * are currently in beta and might be subject to changes. Endpoint Permission: Admin, + * Non-Signing Admin, Signer, Approver, Editor, Viewer. + */ + @Test + public void getUtxoSelectionConfigTest() { + CompletableFuture> response = + api.getUtxoSelectionConfig(); + } + /** * List unspent outputs (UTXOs) * @@ -73,14 +91,41 @@ public void getUtxosTest() { maxAmount); } + /** + * Get vault and asset UTXO selection config + * + *

Returns the config stored at this vault-and-asset scope, if any, and the effective + * strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the + * recommended strategy. When no row is stored at this scope and none is inherited from the + * workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if + * adaptive selection is serving for this scope, otherwise `ASC`. **Note:** These + * endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, + * Non-Signing Admin, Signer, Approver, Editor, Viewer. + */ + @Test + public void getVaultAssetUtxoSelectionConfigTest() { + String vaultAccountId = null; + String assetId = null; + CompletableFuture> response = + api.getVaultAssetUtxoSelectionConfig(vaultAccountId, assetId); + } + /** * Attach or detach labels to/from UTXOs * *

Attach or detach labels to/from UTXOs in a vault account. Labels can be used for * organizing and filtering UTXOs. Labels are applied additively — `labelsToAttach` * adds to the existing label set and `labelsToDetach` removes from it. Neither - * operation replaces the full set. **Note:** These endpoints are currently in beta and might be - * subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. + * operation replaces the full set. The request is all-or-nothing: if any identifier cannot be + * labelled, no UTXO is labelled and the request fails with `400`. The response lists + * every failed identifier in `failures`, each with its own `reason` — use + * it, not the status, to decide what to do: - `NOT_FOUND` — not found in this vault + * and asset. - `NOT_LABELLABLE` — spent, or removed, and can no longer be labelled. A + * UTXO removed within the last hour is reported as `NOT_FOUND` with `utxoStatus: + * REMOVED`; if it does not reappear, it becomes `NOT_LABELLABLE` after about an + * hour. A `400` without `failures` means the request itself is malformed. + * **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint + * Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. */ @Test public void updateUtxoLabelsTest() { @@ -92,4 +137,37 @@ public void updateUtxoLabelsTest() { api.updateUtxoLabels( attachDetachUtxoLabelsRequest, vaultAccountId, assetId, idempotencyKey); } + + /** + * Upsert UTXO selection config + * + *

Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is + * recommended. **Note:** These endpoints are currently in beta and might be subject to changes. + * Endpoint Permission: Admin, Non-Signing Admin. + */ + @Test + public void upsertUtxoSelectionConfigTest() { + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest = null; + String idempotencyKey = null; + CompletableFuture> response = + api.upsertUtxoSelectionConfig(upsertUtxoSelectionConfigRequest, idempotencyKey); + } + + /** + * Upsert vault and asset UTXO selection config + * + *

Creates or updates the UTXO selection strategy for this vault account and asset. + * `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and + * might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + */ + @Test + public void upsertVaultAssetUtxoSelectionConfigTest() { + UpsertUtxoSelectionConfigRequest upsertUtxoSelectionConfigRequest = null; + String vaultAccountId = null; + String assetId = null; + String idempotencyKey = null; + CompletableFuture> response = + api.upsertVaultAssetUtxoSelectionConfig( + upsertUtxoSelectionConfigRequest, vaultAccountId, assetId, idempotencyKey); + } } diff --git a/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java b/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java index bf44c4a4..f78a3672 100644 --- a/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java +++ b/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java @@ -14,8 +14,10 @@ import com.fireblocks.sdk.ApiResponse; +import com.fireblocks.sdk.model.CreateWebhookMtlsConfigRequest; import com.fireblocks.sdk.model.CreateWebhookOauthRequest; import com.fireblocks.sdk.model.CreateWebhookRequest; +import com.fireblocks.sdk.model.DeleteWebhookMtlsConfigResponse; import com.fireblocks.sdk.model.DeleteWebhookOauthResponse; import com.fireblocks.sdk.model.NotificationAttemptsPaginatedResponse; import com.fireblocks.sdk.model.NotificationPaginatedResponse; @@ -27,11 +29,13 @@ import com.fireblocks.sdk.model.ResendFailedNotificationsRequest; import com.fireblocks.sdk.model.ResendFailedNotificationsResponse; import com.fireblocks.sdk.model.ResendNotificationsByResourceIdRequest; +import com.fireblocks.sdk.model.UpdateWebhookMtlsConfigRequest; import com.fireblocks.sdk.model.UpdateWebhookOauthRequest; import com.fireblocks.sdk.model.UpdateWebhookRequest; import com.fireblocks.sdk.model.Webhook; import com.fireblocks.sdk.model.WebhookEvent; import com.fireblocks.sdk.model.WebhookMetric; +import com.fireblocks.sdk.model.WebhookMtlsConfig; import com.fireblocks.sdk.model.WebhookMtlsCsrResponse; import com.fireblocks.sdk.model.WebhookOauthCredentials; import com.fireblocks.sdk.model.WebhookPaginatedResponse; @@ -62,6 +66,26 @@ public void createWebhookTest() { api.createWebhook(createWebhookRequest, idempotencyKey); } + /** + * Create an mTLS configuration + * + *

Stores a certificate signed against the CSR from `GET + * /v1/webhooks_settings/mtls_csr` and returns its id, which is then set as + * `webhookMtlsId` on a webhook or on OAuth credentials. The private key the + * certificate was issued for is derived from the certificate, so it is never named by the + * caller. Re-uploading a certificate already stored returns the existing id rather than + * creating a second configuration, so several webhooks and OAuth credentials can share one + * certificate. A certificate that was not issued for a private key this workspace holds is + * rejected with a `400`. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + */ + @Test + public void createWebhookMtlsConfigTest() { + CreateWebhookMtlsConfigRequest createWebhookMtlsConfigRequest = null; + String idempotencyKey = null; + CompletableFuture> response = + api.createWebhookMtlsConfig(createWebhookMtlsConfigRequest, idempotencyKey); + } + /** * Create OAuth credentials * @@ -90,6 +114,31 @@ public void deleteWebhookTest() { CompletableFuture> response = api.deleteWebhook(webhookId); } + /** + * Delete an mTLS configuration + * + *

Deletes an mTLS configuration. By default the delete is refused while the configuration is + * still in use: if any webhook or OAuth credentials reference it, nothing is deleted and the + * request fails with `409 Conflict`, naming the reason and listing the ids of what + * references it. This protects a shared configuration from being removed out from under the + * webhooks and token requests that depend on it. Pass `forceDelete=true` to + * delete anyway. That detaches everything referencing it — it clears `webhookMtlsId` + * on each webhook and OAuth credentials, it does **not** delete them — then deletes the + * configuration and returns the deleted resource together with `detachedWebhookIds` + * and `detachedWebhookOauthIds`. Detached webhooks keep delivering notifications, and + * detached OAuth credentials keep requesting tokens, but without a client certificate, so an + * endpoint that requires mTLS will reject them from that point on. When nothing references the + * configuration the delete succeeds either way, and both lists come back empty. **Endpoint + * Permissions:** Owner, Admin, Non-Signing Admin. + */ + @Test + public void deleteWebhookMtlsConfigTest() { + UUID webhookMtlsId = null; + Boolean forceDelete = null; + CompletableFuture> response = + api.deleteWebhookMtlsConfig(webhookMtlsId, forceDelete); + } + /** * Delete OAuth credentials * @@ -243,6 +292,32 @@ public void getWebhookTest() { CompletableFuture> response = api.getWebhook(webhookId); } + /** + * Get an mTLS configuration by id + * + *

Retrieve one stored mTLS configuration by its id. + */ + @Test + public void getWebhookMtlsConfigTest() { + UUID webhookMtlsId = null; + CompletableFuture> response = + api.getWebhookMtlsConfig(webhookMtlsId); + } + + /** + * List the uploaded mTLS configurations + * + *

Lists the workspace's mTLS configurations, newest first. Pass `ids` to ask + * about particular ones instead — useful for resolving the `webhookMtlsId` values on + * a set of webhooks in one call. + */ + @Test + public void getWebhookMtlsConfigsTest() { + List ids = null; + CompletableFuture>> response = + api.getWebhookMtlsConfigs(ids); + } + /** * Get OAuth credentials by id * @@ -357,6 +432,26 @@ public void updateWebhookTest() { api.updateWebhook(updateWebhookRequest, webhookId); } + /** + * Update an mTLS configuration + * + *

Renames a configuration, replaces its certificate, or both. Only the fields present in the + * request are changed; anything omitted is left as it is, and a request with neither field is + * rejected with a `400`. Replacing `signedCert` switches every webhook and + * OAuth credentials set using this configuration over to the new certificate in one write, and + * the private key it was issued for is re-derived from the certificate. A replacement that was + * not issued for a private key this workspace holds is rejected with a `400`. Sending + * `name: null` removes the label. **Endpoint Permissions:** Owner, Admin, Non-Signing + * Admin. + */ + @Test + public void updateWebhookMtlsConfigTest() { + UpdateWebhookMtlsConfigRequest updateWebhookMtlsConfigRequest = null; + UUID webhookMtlsId = null; + CompletableFuture> response = + api.updateWebhookMtlsConfig(updateWebhookMtlsConfigRequest, webhookMtlsId); + } + /** * Update OAuth credentials * @@ -370,7 +465,7 @@ public void updateWebhookTest() { * quick way to empty it without naming every key. There is no ambiguity between the two uses of * `null` — one names an entry to delete, the other names the field. A claim cannot be * set to JSON `null`, though, on this endpoint or on create, because `null` - * is spent on deletion. `mtlsClientSignedCert` is a scalar rather than a map, so + * is spent on deletion. `webhookMtlsId` is a scalar rather than a map, so * `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing * Admin. */ diff --git a/src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequestTest.java b/src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequestTest.java new file mode 100644 index 00000000..cdf4d2d8 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipRequestTest.java @@ -0,0 +1,34 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for AddressRegistryCreateProofOfOwnershipRequest */ +class AddressRegistryCreateProofOfOwnershipRequestTest { + private final AddressRegistryCreateProofOfOwnershipRequest model = + new AddressRegistryCreateProofOfOwnershipRequest(); + + /** Model tests for AddressRegistryCreateProofOfOwnershipRequest */ + @Test + void testAddressRegistryCreateProofOfOwnershipRequest() { + // TODO: test AddressRegistryCreateProofOfOwnershipRequest + } + + /** Test the property 'address' */ + @Test + void addressTest() { + // TODO: test address + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponseTest.java b/src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponseTest.java new file mode 100644 index 00000000..aa1417af --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/AddressRegistryCreateProofOfOwnershipResponseTest.java @@ -0,0 +1,52 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for AddressRegistryCreateProofOfOwnershipResponse */ +class AddressRegistryCreateProofOfOwnershipResponseTest { + private final AddressRegistryCreateProofOfOwnershipResponse model = + new AddressRegistryCreateProofOfOwnershipResponse(); + + /** Model tests for AddressRegistryCreateProofOfOwnershipResponse */ + @Test + void testAddressRegistryCreateProofOfOwnershipResponse() { + // TODO: test AddressRegistryCreateProofOfOwnershipResponse + } + + /** Test the property 'pdf' */ + @Test + void pdfTest() { + // TODO: test pdf + } + + /** Test the property 'exportId' */ + @Test + void exportIdTest() { + // TODO: test exportId + } + + /** Test the property 'verificationHash' */ + @Test + void verificationHashTest() { + // TODO: test verificationHash + } + + /** Test the property 'expiresAt' */ + @Test + void expiresAtTest() { + // TODO: test expiresAt + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/AddressRegistryLegalEntityTest.java b/src/test/java/com/fireblocks/sdk/model/AddressRegistryLegalEntityTest.java index 89c44aef..a92c3bff 100644 --- a/src/test/java/com/fireblocks/sdk/model/AddressRegistryLegalEntityTest.java +++ b/src/test/java/com/fireblocks/sdk/model/AddressRegistryLegalEntityTest.java @@ -60,4 +60,10 @@ void travelRuleProvidersTest() { void emailTest() { // TODO: test email } + + /** Test the property 'proofOfOwnershipAvailable' */ + @Test + void proofOfOwnershipAvailableTest() { + // TODO: test proofOfOwnershipAvailable + } } diff --git a/src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequestTest.java b/src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequestTest.java new file mode 100644 index 00000000..b63bb89c --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipRequestTest.java @@ -0,0 +1,52 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for AddressRegistryVerifyProofOfOwnershipRequest */ +class AddressRegistryVerifyProofOfOwnershipRequestTest { + private final AddressRegistryVerifyProofOfOwnershipRequest model = + new AddressRegistryVerifyProofOfOwnershipRequest(); + + /** Model tests for AddressRegistryVerifyProofOfOwnershipRequest */ + @Test + void testAddressRegistryVerifyProofOfOwnershipRequest() { + // TODO: test AddressRegistryVerifyProofOfOwnershipRequest + } + + /** Test the property 'exportId' */ + @Test + void exportIdTest() { + // TODO: test exportId + } + + /** Test the property 'verificationHash' */ + @Test + void verificationHashTest() { + // TODO: test verificationHash + } + + /** Test the property 'address' */ + @Test + void addressTest() { + // TODO: test address + } + + /** Test the property 'expiresAt' */ + @Test + void expiresAtTest() { + // TODO: test expiresAt + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponseTest.java b/src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponseTest.java new file mode 100644 index 00000000..e8d430c7 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/AddressRegistryVerifyProofOfOwnershipResponseTest.java @@ -0,0 +1,40 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for AddressRegistryVerifyProofOfOwnershipResponse */ +class AddressRegistryVerifyProofOfOwnershipResponseTest { + private final AddressRegistryVerifyProofOfOwnershipResponse model = + new AddressRegistryVerifyProofOfOwnershipResponse(); + + /** Model tests for AddressRegistryVerifyProofOfOwnershipResponse */ + @Test + void testAddressRegistryVerifyProofOfOwnershipResponse() { + // TODO: test AddressRegistryVerifyProofOfOwnershipResponse + } + + /** Test the property 'valid' */ + @Test + void validTest() { + // TODO: test valid + } + + /** Test the property 'expiresAt' */ + @Test + void expiresAtTest() { + // TODO: test expiresAt + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/AllocationWithdrawPayloadTest.java b/src/test/java/com/fireblocks/sdk/model/AllocationWithdrawPayloadTest.java index 3aa18155..35afb55b 100644 --- a/src/test/java/com/fireblocks/sdk/model/AllocationWithdrawPayloadTest.java +++ b/src/test/java/com/fireblocks/sdk/model/AllocationWithdrawPayloadTest.java @@ -25,18 +25,6 @@ void testAllocationWithdrawPayload() { // TODO: test AllocationWithdrawPayload } - /** Test the property 'vaultAccountId' */ - @Test - void vaultAccountIdTest() { - // TODO: test vaultAccountId - } - - /** Test the property 'asset' */ - @Test - void assetTest() { - // TODO: test asset - } - /** Test the property 'allocationTransactionId' */ @Test void allocationTransactionIdTest() { diff --git a/src/test/java/com/fireblocks/sdk/model/CantonCallDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/CantonCallDetailsTest.java new file mode 100644 index 00000000..a35ad8f5 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/CantonCallDetailsTest.java @@ -0,0 +1,57 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for CantonCallDetails */ +class CantonCallDetailsTest { + private final CantonCallDetails model = new CantonCallDetails(); + + /** Model tests for CantonCallDetails */ + @Test + void testCantonCallDetails() { + // TODO: test CantonCallDetails + } + + /** Test the property 'version' */ + @Test + void versionTest() { + // TODO: test version + } + + /** Test the property 'domain' */ + @Test + void domainTest() { + // TODO: test domain + } + + /** Test the property 'type' */ + @Test + void typeTest() { + // TODO: test type + } + + /** Test the property 'vendor' */ + @Test + void vendorTest() { + // TODO: test vendor + } + + /** Test the property 'originalTransactionId' */ + @Test + void originalTransactionIdTest() { + // TODO: test originalTransactionId + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/CantonDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/CantonDetailsTest.java new file mode 100644 index 00000000..c4ddfe65 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/CantonDetailsTest.java @@ -0,0 +1,45 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for CantonDetails */ +class CantonDetailsTest { + private final CantonDetails model = new CantonDetails(); + + /** Model tests for CantonDetails */ + @Test + void testCantonDetails() { + // TODO: test CantonDetails + } + + /** Test the property 'offerResponse' */ + @Test + void offerResponseTest() { + // TODO: test offerResponse + } + + /** Test the property 'call' */ + @Test + void callTest() { + // TODO: test call + } + + /** Test the property 'settlement' */ + @Test + void settlementTest() { + // TODO: test settlement + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProviderTest.java b/src/test/java/com/fireblocks/sdk/model/CantonDomainEnumTest.java similarity index 72% rename from src/test/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProviderTest.java rename to src/test/java/com/fireblocks/sdk/model/CantonDomainEnumTest.java index 876efb10..d511d701 100644 --- a/src/test/java/com/fireblocks/sdk/model/AddressRegistryTravelRuleProviderTest.java +++ b/src/test/java/com/fireblocks/sdk/model/CantonDomainEnumTest.java @@ -15,11 +15,11 @@ import org.junit.jupiter.api.Test; -/** Model tests for AddressRegistryTravelRuleProvider */ -class AddressRegistryTravelRuleProviderTest { - /** Model tests for AddressRegistryTravelRuleProvider */ +/** Model tests for CantonDomainEnum */ +class CantonDomainEnumTest { + /** Model tests for CantonDomainEnum */ @Test - void testAddressRegistryTravelRuleProvider() { - // TODO: test AddressRegistryTravelRuleProvider + void testCantonDomainEnum() { + // TODO: test CantonDomainEnum } } diff --git a/src/test/java/com/fireblocks/sdk/model/CantonOfferResponseDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/CantonOfferResponseDetailsTest.java new file mode 100644 index 00000000..dfc9aaf6 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/CantonOfferResponseDetailsTest.java @@ -0,0 +1,75 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for CantonOfferResponseDetails */ +class CantonOfferResponseDetailsTest { + private final CantonOfferResponseDetails model = new CantonOfferResponseDetails(); + + /** Model tests for CantonOfferResponseDetails */ + @Test + void testCantonOfferResponseDetails() { + // TODO: test CantonOfferResponseDetails + } + + /** Test the property 'version' */ + @Test + void versionTest() { + // TODO: test version + } + + /** Test the property 'domain' */ + @Test + void domainTest() { + // TODO: test domain + } + + /** Test the property 'vendor' */ + @Test + void vendorTest() { + // TODO: test vendor + } + + /** Test the property 'availableResponses' */ + @Test + void availableResponsesTest() { + // TODO: test availableResponses + } + + /** Test the property 'expiresAt' */ + @Test + void expiresAtTest() { + // TODO: test expiresAt + } + + /** Test the property 'approvalTransactionId' */ + @Test + void approvalTransactionIdTest() { + // TODO: test approvalTransactionId + } + + /** Test the property 'originalTransactionId' */ + @Test + void originalTransactionIdTest() { + // TODO: test originalTransactionId + } + + /** Test the property 'verdict' */ + @Test + void verdictTest() { + // TODO: test verdict + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/CantonSettlementDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/CantonSettlementDetailsTest.java new file mode 100644 index 00000000..b48bf94e --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/CantonSettlementDetailsTest.java @@ -0,0 +1,51 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for CantonSettlementDetails */ +class CantonSettlementDetailsTest { + private final CantonSettlementDetails model = new CantonSettlementDetails(); + + /** Model tests for CantonSettlementDetails */ + @Test + void testCantonSettlementDetails() { + // TODO: test CantonSettlementDetails + } + + /** Test the property 'version' */ + @Test + void versionTest() { + // TODO: test version + } + + /** Test the property 'domain' */ + @Test + void domainTest() { + // TODO: test domain + } + + /** Test the property 'type' */ + @Test + void typeTest() { + // TODO: test type + } + + /** Test the property 'originalTransactionId' */ + @Test + void originalTransactionIdTest() { + // TODO: test originalTransactionId + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/CantonVendorEnumTest.java b/src/test/java/com/fireblocks/sdk/model/CantonVendorEnumTest.java new file mode 100644 index 00000000..e211256c --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/CantonVendorEnumTest.java @@ -0,0 +1,25 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for CantonVendorEnum */ +class CantonVendorEnumTest { + /** Model tests for CantonVendorEnum */ + @Test + void testCantonVendorEnum() { + // TODO: test CantonVendorEnum + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequestTest.java b/src/test/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequestTest.java new file mode 100644 index 00000000..be477872 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/CreateWebhookMtlsConfigRequestTest.java @@ -0,0 +1,39 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for CreateWebhookMtlsConfigRequest */ +class CreateWebhookMtlsConfigRequestTest { + private final CreateWebhookMtlsConfigRequest model = new CreateWebhookMtlsConfigRequest(); + + /** Model tests for CreateWebhookMtlsConfigRequest */ + @Test + void testCreateWebhookMtlsConfigRequest() { + // TODO: test CreateWebhookMtlsConfigRequest + } + + /** Test the property 'name' */ + @Test + void nameTest() { + // TODO: test name + } + + /** Test the property 'signedCert' */ + @Test + void signedCertTest() { + // TODO: test signedCert + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/CreateWebhookOauthRequestTest.java b/src/test/java/com/fireblocks/sdk/model/CreateWebhookOauthRequestTest.java index 5aeb2913..ba2c7034 100644 --- a/src/test/java/com/fireblocks/sdk/model/CreateWebhookOauthRequestTest.java +++ b/src/test/java/com/fireblocks/sdk/model/CreateWebhookOauthRequestTest.java @@ -73,9 +73,9 @@ void customHeadersTest() { // TODO: test customHeaders } - /** Test the property 'mtlsClientSignedCert' */ + /** Test the property 'webhookMtlsId' */ @Test - void mtlsClientSignedCertTest() { - // TODO: test mtlsClientSignedCert + void webhookMtlsIdTest() { + // TODO: test webhookMtlsId } } diff --git a/src/test/java/com/fireblocks/sdk/model/CreateWebhookRequestTest.java b/src/test/java/com/fireblocks/sdk/model/CreateWebhookRequestTest.java index 39e2e321..6ae6be02 100644 --- a/src/test/java/com/fireblocks/sdk/model/CreateWebhookRequestTest.java +++ b/src/test/java/com/fireblocks/sdk/model/CreateWebhookRequestTest.java @@ -49,10 +49,10 @@ void enabledTest() { // TODO: test enabled } - /** Test the property 'mtls' */ + /** Test the property 'webhookMtlsId' */ @Test - void mtlsTest() { - // TODO: test mtls + void webhookMtlsIdTest() { + // TODO: test webhookMtlsId } /** Test the property 'webhookOauthId' */ diff --git a/src/test/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponseTest.java b/src/test/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponseTest.java new file mode 100644 index 00000000..5e2a8b7b --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/DeleteWebhookMtlsConfigResponseTest.java @@ -0,0 +1,75 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for DeleteWebhookMtlsConfigResponse */ +class DeleteWebhookMtlsConfigResponseTest { + private final DeleteWebhookMtlsConfigResponse model = new DeleteWebhookMtlsConfigResponse(); + + /** Model tests for DeleteWebhookMtlsConfigResponse */ + @Test + void testDeleteWebhookMtlsConfigResponse() { + // TODO: test DeleteWebhookMtlsConfigResponse + } + + /** Test the property 'id' */ + @Test + void idTest() { + // TODO: test id + } + + /** Test the property 'name' */ + @Test + void nameTest() { + // TODO: test name + } + + /** Test the property 'signedCert' */ + @Test + void signedCertTest() { + // TODO: test signedCert + } + + /** Test the property 'expiresAt' */ + @Test + void expiresAtTest() { + // TODO: test expiresAt + } + + /** Test the property 'createdAt' */ + @Test + void createdAtTest() { + // TODO: test createdAt + } + + /** Test the property 'updatedAt' */ + @Test + void updatedAtTest() { + // TODO: test updatedAt + } + + /** Test the property 'detachedWebhookIds' */ + @Test + void detachedWebhookIdsTest() { + // TODO: test detachedWebhookIds + } + + /** Test the property 'detachedWebhookOauthIds' */ + @Test + void detachedWebhookOauthIdsTest() { + // TODO: test detachedWebhookOauthIds + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponseTest.java b/src/test/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponseTest.java index 4e0ad0ec..ad36fdcb 100644 --- a/src/test/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponseTest.java +++ b/src/test/java/com/fireblocks/sdk/model/DeleteWebhookOauthResponseTest.java @@ -73,10 +73,10 @@ void customHeadersTest() { // TODO: test customHeaders } - /** Test the property 'mtlsClientSignedCert' */ + /** Test the property 'webhookMtlsId' */ @Test - void mtlsClientSignedCertTest() { - // TODO: test mtlsClientSignedCert + void webhookMtlsIdTest() { + // TODO: test webhookMtlsId } /** Test the property 'createdAt' */ diff --git a/src/test/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfigTest.java b/src/test/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfigTest.java new file mode 100644 index 00000000..7faa601d --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/EffectiveUtxoSelectionConfigTest.java @@ -0,0 +1,39 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for EffectiveUtxoSelectionConfig */ +class EffectiveUtxoSelectionConfigTest { + private final EffectiveUtxoSelectionConfig model = new EffectiveUtxoSelectionConfig(); + + /** Model tests for EffectiveUtxoSelectionConfig */ + @Test + void testEffectiveUtxoSelectionConfig() { + // TODO: test EffectiveUtxoSelectionConfig + } + + /** Test the property 'strategy' */ + @Test + void strategyTest() { + // TODO: test strategy + } + + /** Test the property 'source' */ + @Test + void sourceTest() { + // TODO: test source + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/ExecutionRequestDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/ExecutionRequestDetailsTest.java index 1ec47125..53543aca 100644 --- a/src/test/java/com/fireblocks/sdk/model/ExecutionRequestDetailsTest.java +++ b/src/test/java/com/fireblocks/sdk/model/ExecutionRequestDetailsTest.java @@ -78,4 +78,16 @@ void quoteIdTest() { void reQuoteTest() { // TODO: test reQuote } + + /** Test the property 'price' */ + @Test + void priceTest() { + // TODO: test price + } + + /** Test the property 'timeInForce' */ + @Test + void timeInForceTest() { + // TODO: test timeInForce + } } diff --git a/src/test/java/com/fireblocks/sdk/model/ExecutionResponseDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/ExecutionResponseDetailsTest.java index e4af11a1..3a0acd3e 100644 --- a/src/test/java/com/fireblocks/sdk/model/ExecutionResponseDetailsTest.java +++ b/src/test/java/com/fireblocks/sdk/model/ExecutionResponseDetailsTest.java @@ -84,4 +84,16 @@ void quoteAmountTest() { void reQuoteTest() { // TODO: test reQuote } + + /** Test the property 'price' */ + @Test + void priceTest() { + // TODO: test price + } + + /** Test the property 'timeInForce' */ + @Test + void timeInForceTest() { + // TODO: test timeInForce + } } diff --git a/src/test/java/com/fireblocks/sdk/model/WebhookMtlsTest.java b/src/test/java/com/fireblocks/sdk/model/FokTimeInForceTest.java similarity index 67% rename from src/test/java/com/fireblocks/sdk/model/WebhookMtlsTest.java rename to src/test/java/com/fireblocks/sdk/model/FokTimeInForceTest.java index 50551cf5..07959647 100644 --- a/src/test/java/com/fireblocks/sdk/model/WebhookMtlsTest.java +++ b/src/test/java/com/fireblocks/sdk/model/FokTimeInForceTest.java @@ -15,19 +15,19 @@ import org.junit.jupiter.api.Test; -/** Model tests for WebhookMtls */ -class WebhookMtlsTest { - private final WebhookMtls model = new WebhookMtls(); +/** Model tests for FokTimeInForce */ +class FokTimeInForceTest { + private final FokTimeInForce model = new FokTimeInForce(); - /** Model tests for WebhookMtls */ + /** Model tests for FokTimeInForce */ @Test - void testWebhookMtls() { - // TODO: test WebhookMtls + void testFokTimeInForce() { + // TODO: test FokTimeInForce } - /** Test the property 'clientSignedCert' */ + /** Test the property 'type' */ @Test - void clientSignedCertTest() { - // TODO: test clientSignedCert + void typeTest() { + // TODO: test type } } diff --git a/src/test/java/com/fireblocks/sdk/model/LimitExecutionRequestDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/LimitExecutionRequestDetailsTest.java new file mode 100644 index 00000000..65b93b6d --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/LimitExecutionRequestDetailsTest.java @@ -0,0 +1,81 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for LimitExecutionRequestDetails */ +class LimitExecutionRequestDetailsTest { + private final LimitExecutionRequestDetails model = new LimitExecutionRequestDetails(); + + /** Model tests for LimitExecutionRequestDetails */ + @Test + void testLimitExecutionRequestDetails() { + // TODO: test LimitExecutionRequestDetails + } + + /** Test the property 'type' */ + @Test + void typeTest() { + // TODO: test type + } + + /** Test the property 'price' */ + @Test + void priceTest() { + // TODO: test price + } + + /** Test the property 'timeInForce' */ + @Test + void timeInForceTest() { + // TODO: test timeInForce + } + + /** Test the property 'side' */ + @Test + void sideTest() { + // TODO: test side + } + + /** Test the property 'baseAmount' */ + @Test + void baseAmountTest() { + // TODO: test baseAmount + } + + /** Test the property 'baseAssetId' */ + @Test + void baseAssetIdTest() { + // TODO: test baseAssetId + } + + /** Test the property 'baseAssetRail' */ + @Test + void baseAssetRailTest() { + // TODO: test baseAssetRail + } + + /** Test the property 'quoteAssetId' */ + @Test + void quoteAssetIdTest() { + // TODO: test quoteAssetId + } + + /** Test the property 'quoteAssetRail' */ + @Test + void quoteAssetRailTest() { + // TODO: test quoteAssetRail + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/LimitExecutionResponseDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/LimitExecutionResponseDetailsTest.java new file mode 100644 index 00000000..f84d8f8c --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/LimitExecutionResponseDetailsTest.java @@ -0,0 +1,81 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for LimitExecutionResponseDetails */ +class LimitExecutionResponseDetailsTest { + private final LimitExecutionResponseDetails model = new LimitExecutionResponseDetails(); + + /** Model tests for LimitExecutionResponseDetails */ + @Test + void testLimitExecutionResponseDetails() { + // TODO: test LimitExecutionResponseDetails + } + + /** Test the property 'type' */ + @Test + void typeTest() { + // TODO: test type + } + + /** Test the property 'price' */ + @Test + void priceTest() { + // TODO: test price + } + + /** Test the property 'timeInForce' */ + @Test + void timeInForceTest() { + // TODO: test timeInForce + } + + /** Test the property 'side' */ + @Test + void sideTest() { + // TODO: test side + } + + /** Test the property 'baseAmount' */ + @Test + void baseAmountTest() { + // TODO: test baseAmount + } + + /** Test the property 'baseAssetId' */ + @Test + void baseAssetIdTest() { + // TODO: test baseAssetId + } + + /** Test the property 'baseAssetRail' */ + @Test + void baseAssetRailTest() { + // TODO: test baseAssetRail + } + + /** Test the property 'quoteAssetId' */ + @Test + void quoteAssetIdTest() { + // TODO: test quoteAssetId + } + + /** Test the property 'quoteAssetRail' */ + @Test + void quoteAssetRailTest() { + // TODO: test quoteAssetRail + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/LimitTypeDetailsTest.java b/src/test/java/com/fireblocks/sdk/model/LimitTypeDetailsTest.java new file mode 100644 index 00000000..2f6dfef7 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/LimitTypeDetailsTest.java @@ -0,0 +1,45 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for LimitTypeDetails */ +class LimitTypeDetailsTest { + private final LimitTypeDetails model = new LimitTypeDetails(); + + /** Model tests for LimitTypeDetails */ + @Test + void testLimitTypeDetails() { + // TODO: test LimitTypeDetails + } + + /** Test the property 'type' */ + @Test + void typeTest() { + // TODO: test type + } + + /** Test the property 'price' */ + @Test + void priceTest() { + // TODO: test price + } + + /** Test the property 'timeInForce' */ + @Test + void timeInForceTest() { + // TODO: test timeInForce + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/LimitTypeEnumTest.java b/src/test/java/com/fireblocks/sdk/model/LimitTypeEnumTest.java new file mode 100644 index 00000000..9046fded --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/LimitTypeEnumTest.java @@ -0,0 +1,25 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for LimitTypeEnum */ +class LimitTypeEnumTest { + /** Model tests for LimitTypeEnum */ + @Test + void testLimitTypeEnum() { + // TODO: test LimitTypeEnum + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/ParticipantOnboardingPayloadTest.java b/src/test/java/com/fireblocks/sdk/model/ParticipantOnboardingPayloadTest.java index abb9439f..9f190e22 100644 --- a/src/test/java/com/fireblocks/sdk/model/ParticipantOnboardingPayloadTest.java +++ b/src/test/java/com/fireblocks/sdk/model/ParticipantOnboardingPayloadTest.java @@ -49,12 +49,6 @@ void operatorTest() { // TODO: test operator } - /** Test the property 'provider' */ - @Test - void providerTest() { - // TODO: test provider - } - /** Test the property 'compliance' */ @Test void complianceTest() { @@ -72,4 +66,10 @@ void registrarTest() { void clientOnboarderTest() { // TODO: test clientOnboarder } + + /** Test the property 'upgrader' */ + @Test + void upgraderTest() { + // TODO: test upgrader + } } diff --git a/src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTest.java b/src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTest.java new file mode 100644 index 00000000..9ce9293b --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTest.java @@ -0,0 +1,33 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for PostTradeSettlement */ +class PostTradeSettlementTest { + private final PostTradeSettlement model = new PostTradeSettlement(); + + /** Model tests for PostTradeSettlement */ + @Test + void testPostTradeSettlement() { + // TODO: test PostTradeSettlement + } + + /** Test the property 'type' */ + @Test + void typeTest() { + // TODO: test type + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTypeTest.java b/src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTypeTest.java new file mode 100644 index 00000000..a52c8f4e --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/PostTradeSettlementTypeTest.java @@ -0,0 +1,25 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for PostTradeSettlementType */ +class PostTradeSettlementTypeTest { + /** Model tests for PostTradeSettlementType */ + @Test + void testPostTradeSettlementType() { + // TODO: test PostTradeSettlementType + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/RatesRequestTest.java b/src/test/java/com/fireblocks/sdk/model/RatesRequestTest.java index f9b9da1e..5d01c22b 100644 --- a/src/test/java/com/fireblocks/sdk/model/RatesRequestTest.java +++ b/src/test/java/com/fireblocks/sdk/model/RatesRequestTest.java @@ -42,4 +42,10 @@ void baseAssetIdTest() { void quoteAssetIdTest() { // TODO: test quoteAssetId } + + /** Test the property 'baseAmount' */ + @Test + void baseAmountTest() { + // TODO: test baseAmount + } } diff --git a/src/test/java/com/fireblocks/sdk/model/TransactionResponseTest.java b/src/test/java/com/fireblocks/sdk/model/TransactionResponseTest.java index db33cfee..c0d7c69b 100644 --- a/src/test/java/com/fireblocks/sdk/model/TransactionResponseTest.java +++ b/src/test/java/com/fireblocks/sdk/model/TransactionResponseTest.java @@ -169,6 +169,12 @@ void requestedFeeCurrencyTest() { // TODO: test requestedFeeCurrency } + /** Test the property 'cantonDetails' */ + @Test + void cantonDetailsTest() { + // TODO: test cantonDetails + } + /** Test the property 'networkRecords' */ @Test void networkRecordsTest() { diff --git a/src/test/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequestTest.java b/src/test/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequestTest.java new file mode 100644 index 00000000..4bc1a4d5 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/UpdateWebhookMtlsConfigRequestTest.java @@ -0,0 +1,39 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for UpdateWebhookMtlsConfigRequest */ +class UpdateWebhookMtlsConfigRequestTest { + private final UpdateWebhookMtlsConfigRequest model = new UpdateWebhookMtlsConfigRequest(); + + /** Model tests for UpdateWebhookMtlsConfigRequest */ + @Test + void testUpdateWebhookMtlsConfigRequest() { + // TODO: test UpdateWebhookMtlsConfigRequest + } + + /** Test the property 'name' */ + @Test + void nameTest() { + // TODO: test name + } + + /** Test the property 'signedCert' */ + @Test + void signedCertTest() { + // TODO: test signedCert + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequestTest.java b/src/test/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequestTest.java index 21bdd39a..73f390ec 100644 --- a/src/test/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequestTest.java +++ b/src/test/java/com/fireblocks/sdk/model/UpdateWebhookOauthRequestTest.java @@ -73,9 +73,9 @@ void customHeadersTest() { // TODO: test customHeaders } - /** Test the property 'mtlsClientSignedCert' */ + /** Test the property 'webhookMtlsId' */ @Test - void mtlsClientSignedCertTest() { - // TODO: test mtlsClientSignedCert + void webhookMtlsIdTest() { + // TODO: test webhookMtlsId } } diff --git a/src/test/java/com/fireblocks/sdk/model/UpdateWebhookRequestTest.java b/src/test/java/com/fireblocks/sdk/model/UpdateWebhookRequestTest.java index e3ae46a1..9d4451fc 100644 --- a/src/test/java/com/fireblocks/sdk/model/UpdateWebhookRequestTest.java +++ b/src/test/java/com/fireblocks/sdk/model/UpdateWebhookRequestTest.java @@ -49,10 +49,10 @@ void enabledTest() { // TODO: test enabled } - /** Test the property 'mtls' */ + /** Test the property 'webhookMtlsId' */ @Test - void mtlsTest() { - // TODO: test mtls + void webhookMtlsIdTest() { + // TODO: test webhookMtlsId } /** Test the property 'webhookOauthId' */ diff --git a/src/test/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequestTest.java b/src/test/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequestTest.java new file mode 100644 index 00000000..416d98a4 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/UpsertUtxoSelectionConfigRequestTest.java @@ -0,0 +1,33 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for UpsertUtxoSelectionConfigRequest */ +class UpsertUtxoSelectionConfigRequestTest { + private final UpsertUtxoSelectionConfigRequest model = new UpsertUtxoSelectionConfigRequest(); + + /** Model tests for UpsertUtxoSelectionConfigRequest */ + @Test + void testUpsertUtxoSelectionConfigRequest() { + // TODO: test UpsertUtxoSelectionConfigRequest + } + + /** Test the property 'strategy' */ + @Test + void strategyTest() { + // TODO: test strategy + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/UtxoLabelFailureTest.java b/src/test/java/com/fireblocks/sdk/model/UtxoLabelFailureTest.java new file mode 100644 index 00000000..cbcb9595 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/UtxoLabelFailureTest.java @@ -0,0 +1,45 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for UtxoLabelFailure */ +class UtxoLabelFailureTest { + private final UtxoLabelFailure model = new UtxoLabelFailure(); + + /** Model tests for UtxoLabelFailure */ + @Test + void testUtxoLabelFailure() { + // TODO: test UtxoLabelFailure + } + + /** Test the property 'identifier' */ + @Test + void identifierTest() { + // TODO: test identifier + } + + /** Test the property 'reason' */ + @Test + void reasonTest() { + // TODO: test reason + } + + /** Test the property 'utxoStatus' */ + @Test + void utxoStatusTest() { + // TODO: test utxoStatus + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/AddressRegistryErrorTest.java b/src/test/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponseTest.java similarity index 67% rename from src/test/java/com/fireblocks/sdk/model/AddressRegistryErrorTest.java rename to src/test/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponseTest.java index 90aa71d0..e519b4df 100644 --- a/src/test/java/com/fireblocks/sdk/model/AddressRegistryErrorTest.java +++ b/src/test/java/com/fireblocks/sdk/model/UtxoLabelsErrorResponseTest.java @@ -15,20 +15,14 @@ import org.junit.jupiter.api.Test; -/** Model tests for AddressRegistryError */ -class AddressRegistryErrorTest { - private final AddressRegistryError model = new AddressRegistryError(); +/** Model tests for UtxoLabelsErrorResponse */ +class UtxoLabelsErrorResponseTest { + private final UtxoLabelsErrorResponse model = new UtxoLabelsErrorResponse(); - /** Model tests for AddressRegistryError */ + /** Model tests for UtxoLabelsErrorResponse */ @Test - void testAddressRegistryError() { - // TODO: test AddressRegistryError - } - - /** Test the property 'code' */ - @Test - void codeTest() { - // TODO: test code + void testUtxoLabelsErrorResponse() { + // TODO: test UtxoLabelsErrorResponse } /** Test the property 'message' */ @@ -36,4 +30,10 @@ void codeTest() { void messageTest() { // TODO: test message } + + /** Test the property 'failures' */ + @Test + void failuresTest() { + // TODO: test failures + } } diff --git a/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntryTest.java b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntryTest.java new file mode 100644 index 00000000..b4f28ce6 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigEntryTest.java @@ -0,0 +1,39 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for UtxoSelectionConfigEntry */ +class UtxoSelectionConfigEntryTest { + private final UtxoSelectionConfigEntry model = new UtxoSelectionConfigEntry(); + + /** Model tests for UtxoSelectionConfigEntry */ + @Test + void testUtxoSelectionConfigEntry() { + // TODO: test UtxoSelectionConfigEntry + } + + /** Test the property 'strategy' */ + @Test + void strategyTest() { + // TODO: test strategy + } + + /** Test the property 'updatedAt' */ + @Test + void updatedAtTest() { + // TODO: test updatedAt + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponseTest.java b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponseTest.java new file mode 100644 index 00000000..6edaeb3a --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigResponseTest.java @@ -0,0 +1,39 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for UtxoSelectionConfigResponse */ +class UtxoSelectionConfigResponseTest { + private final UtxoSelectionConfigResponse model = new UtxoSelectionConfigResponse(); + + /** Model tests for UtxoSelectionConfigResponse */ + @Test + void testUtxoSelectionConfigResponse() { + // TODO: test UtxoSelectionConfigResponse + } + + /** Test the property 'configured' */ + @Test + void configuredTest() { + // TODO: test configured + } + + /** Test the property 'effective' */ + @Test + void effectiveTest() { + // TODO: test effective + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnumTest.java b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnumTest.java new file mode 100644 index 00000000..8ecec973 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionConfigSourceEnumTest.java @@ -0,0 +1,25 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for UtxoSelectionConfigSourceEnum */ +class UtxoSelectionConfigSourceEnumTest { + /** Model tests for UtxoSelectionConfigSourceEnum */ + @Test + void testUtxoSelectionConfigSourceEnum() { + // TODO: test UtxoSelectionConfigSourceEnum + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnumTest.java b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnumTest.java new file mode 100644 index 00000000..33f5dac4 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/UtxoSelectionStrategyEnumTest.java @@ -0,0 +1,25 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for UtxoSelectionStrategyEnum */ +class UtxoSelectionStrategyEnumTest { + /** Model tests for UtxoSelectionStrategyEnum */ + @Test + void testUtxoSelectionStrategyEnum() { + // TODO: test UtxoSelectionStrategyEnum + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/WebhookMtlsConfigTest.java b/src/test/java/com/fireblocks/sdk/model/WebhookMtlsConfigTest.java new file mode 100644 index 00000000..9c89feb8 --- /dev/null +++ b/src/test/java/com/fireblocks/sdk/model/WebhookMtlsConfigTest.java @@ -0,0 +1,63 @@ +/* + * Fireblocks API + * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + * + * The version of the OpenAPI document: 1.6.2 + * Contact: developers@fireblocks.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.fireblocks.sdk.model; + + +import org.junit.jupiter.api.Test; + +/** Model tests for WebhookMtlsConfig */ +class WebhookMtlsConfigTest { + private final WebhookMtlsConfig model = new WebhookMtlsConfig(); + + /** Model tests for WebhookMtlsConfig */ + @Test + void testWebhookMtlsConfig() { + // TODO: test WebhookMtlsConfig + } + + /** Test the property 'id' */ + @Test + void idTest() { + // TODO: test id + } + + /** Test the property 'name' */ + @Test + void nameTest() { + // TODO: test name + } + + /** Test the property 'signedCert' */ + @Test + void signedCertTest() { + // TODO: test signedCert + } + + /** Test the property 'expiresAt' */ + @Test + void expiresAtTest() { + // TODO: test expiresAt + } + + /** Test the property 'createdAt' */ + @Test + void createdAtTest() { + // TODO: test createdAt + } + + /** Test the property 'updatedAt' */ + @Test + void updatedAtTest() { + // TODO: test updatedAt + } +} diff --git a/src/test/java/com/fireblocks/sdk/model/WebhookOauthCredentialsTest.java b/src/test/java/com/fireblocks/sdk/model/WebhookOauthCredentialsTest.java index e6589b7c..146dd294 100644 --- a/src/test/java/com/fireblocks/sdk/model/WebhookOauthCredentialsTest.java +++ b/src/test/java/com/fireblocks/sdk/model/WebhookOauthCredentialsTest.java @@ -73,10 +73,10 @@ void customHeadersTest() { // TODO: test customHeaders } - /** Test the property 'mtlsClientSignedCert' */ + /** Test the property 'webhookMtlsId' */ @Test - void mtlsClientSignedCertTest() { - // TODO: test mtlsClientSignedCert + void webhookMtlsIdTest() { + // TODO: test webhookMtlsId } /** Test the property 'createdAt' */ diff --git a/src/test/java/com/fireblocks/sdk/model/WebhookTest.java b/src/test/java/com/fireblocks/sdk/model/WebhookTest.java index 71ebb912..03ec4c4b 100644 --- a/src/test/java/com/fireblocks/sdk/model/WebhookTest.java +++ b/src/test/java/com/fireblocks/sdk/model/WebhookTest.java @@ -67,10 +67,10 @@ void updatedAtTest() { // TODO: test updatedAt } - /** Test the property 'mtls' */ + /** Test the property 'webhookMtlsId' */ @Test - void mtlsTest() { - // TODO: test mtls + void webhookMtlsIdTest() { + // TODO: test webhookMtlsId } /** Test the property 'webhookOauthId' */