{"openapi":"3.0.0","paths":{"/account":{"get":{"description":"Returns basic account details such as name, email address, KYC status, etc.","operationId":"getAccount","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetAccountResponse"}}}],"required":["data"]}}}}},"summary":"Get basic account details","tags":["Account"]}},"/account/accessibleAccounts":{"get":{"description":"Returns all accounts accessible to the logged-in email via direct ownership or authorizedLogins membership.","operationId":"getAccessibleAccounts","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccessibleAccountResponse"}}}}],"required":["data"]}}}}},"summary":"Get accessible accounts","tags":["Account"]}},"/account/onboarding":{"post":{"description":"Complete account onboarding by providing user details and onboarding status","operationId":"completeOnboarding","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/OnboardingResponseDto"}}}],"required":["data"]}}}}},"summary":"Complete onboarding","tags":["Account"]}},"/account/apikeys":{"get":{"description":"Returns all api keys for your account, optionally including revoked keys.","operationId":"getApiKeys","parameters":[{"name":"includeRevokedKeys","required":false,"in":"query","description":"Anything except 'true' will be considered `false`.","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GetApiKeyDto"}}}}],"required":["data"]}}}}},"summary":"Get API keys","tags":["Account"]},"post":{"description":"Add a new api key for your account with a specified name.","operationId":"addNewApiKey","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetApiKeyDto"}}}],"required":["data"]}}}}},"summary":"Create a new API key","tags":["Account"]}},"/account/apikeys/{keyId}":{"put":{"description":"Revoke an api key for your account.","operationId":"revokeApiKey","parameters":[{"name":"keyId","required":true,"in":"path","description":"The internal id of the API key to revoke","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetApiKeyDto"}}}],"required":["data"]}}}}},"summary":"Revoke an API key","tags":["Account"]}},"/account/summary":{"get":{"description":"Returns detailed summary of stake positions, known addresses, and rewards","operationId":"getAccountSummary","parameters":[{"name":"skipSolanaBalances","required":false,"in":"query","description":"Skip fetching Solana address balances for faster response (default: false)","schema":{"type":"boolean"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CustomerSummary"}}}],"required":["data"]}}}}},"summary":"Get account summary","tags":["Account"]}},"/account/userIpRestrictions":{"get":{"description":"Get IP restrictions for user account (JWT authentication)","operationId":"getUserIpRestrictions","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetIpRestrictionsResponseDto"}}}],"required":["data"]}}}}},"summary":"Get user IP restrictions","tags":["Account"]},"put":{"description":"Update IP restrictions for user account (JWT authentication)","operationId":"updateUserIpRestrictions","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountIpRestrictionsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetIpRestrictionsResponseDto"}}}],"required":["data"]}}}}},"summary":"Update user IP restrictions","tags":["Account"]}},"/account/apiKeyDefaultIpRestrictions":{"get":{"description":"Get default IP restrictions for all API keys under the account","operationId":"getApiKeyDefaultIpRestrictions","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetIpRestrictionsResponseDto"}}}],"required":["data"]}}}}},"summary":"Get API key default IP restrictions","tags":["Account"]},"put":{"description":"Update default IP restrictions for all API keys under the account","operationId":"updateApiKeyDefaultIpRestrictions","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountIpRestrictionsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetIpRestrictionsResponseDto"}}}],"required":["data"]}}}}},"summary":"Update API key default IP restrictions","tags":["Account"]}},"/solana/stakes":{"get":{"description":"Returns the details of Solana staking positions for your account.","operationId":"getSolanaStakes","parameters":[{"name":"pageNumber","required":false,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":false,"in":"query","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SolanaStakeAccount"}}}}],"required":["data"]}}}}},"summary":"Get Solana Stake Accounts","tags":["Solana"]}},"/solana/stake/buildTransaction":{"post":{"description":"Generate a stake transaction payload containing one or more instructions. Possible instruction types and inputs are described below:\n\nThis returns a serialized transaction which can be deserialized, signed and submitted to the network.\n\nSee [@solana/web.js](https://solana-labs.github.io/solana-web3.js/index.html) docs for deserializing [Versioned Messages](https://solana-labs.github.io/solana-web3.js/variables/VersionedMessage-1.html) and working with [Versioned Transactions](https://solana-labs.github.io/solana-web3.js/classes/VersionedTransaction.html)\n\n***N.B any instructions operating on an existing stake account must specify target stakePubkey in the request body seperate to the instructions***\n\n***Create and delegate new stake account***\n~~~\n{\n  type: 'createAndDelegate'\n  input: {\n    fromPubkey: pubkey of funding address,\n    stakeAuthority: address authorized to delegate and undelegate stake,\n    withdrawAuthority: address authorized to withdraw stake,\n    lamports: amount of lamports to stake (1 sol = 1000000000 lamports),\n    reference: an arbitrary reference used to identify/group the stake within the Pier Two platform,\n    label: an arbitrary label/memo for use within the Pier Two platform\n  }  \n}\n~~~\n\n***Create a new stake account (same input data as 'createAndDelegate')***\n~~~\n{\n  type: 'create'\n  input: {\n    fromPubkey: pubkey of funding address,\n    stakeAuthority: address authorized to delegate and undelegate stake,\n    withdrawAuthority: address authorized to withdraw stake,\n    lamports: amount of lamports to stake (1 sol = 1000000000 lamports),\n    reference: an arbitrary reference used to identify/group the stake within the Pier Two platform,\n    label: an arbitrary label/memo for use within the Pier Two platform\n  }  \n}\n~~~\n\n***Delegate an existing stake account***\n~~~\n{\n  type: 'delegate'\n  input: {\n    authorizedPubkey: address authorized to delegate and undelegate stake\n  }  \n}\n~~~\n\n***Undelegate (deactivate) an existing stake account***\n~~~\n{\n  type: 'undelegate'\n  input: {\n    authorizedPubkey: address authorized to delegate and undelegate stake\n  }  \n}\n~~~\n\n***Withdraw inactive stake (deactivated stake balance or any other excess SOL held by account)***\n~~~\n{\n  type: 'withdraw'\n  input: {\n    toPubkey: recipient of withdrawn funds,\n    authorizedPubkey: address authorized to withdraw stake,\n    lamports: amount of lamports to withdraw (1 sol = 1000000000 lamports),\n  }  \n}\n~~~\n\n***Merge an eligible stake account into target stake account***\n\nAn eligible stake account must have the same stakeAuthority and withdrawAuthority and have been active for an entire epoch and earned rewards\n~~~\n{\n  type: 'merge'\n  input: {\n    sourceStakePubkey: address of stake account to merge (this account will be dissolved/closed onchain),\n    authorizedPubkey: address authorized to delegate and undelegate\n  }  \n}\n~~~\n\n***Change withdraw or stake authority address of an existing stake account***\n\nThis must be signed by the existing authority address of the stake account\n~~~\n{\n  type: 'authorize'\n  input: {\n    authorizedPubkey: the current authority address of the stake account,\n    newAuthorizedPubkey: the new authority address of the stake account,\n    stakeAuthorizationType: the authority type to change (0 for stake authority, 1 for withdraw authority),\n  }  \n}\n~~~\n","operationId":"buildSolanaStakeTransactionPayload","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildTransactionPayloadRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BuildTransactionPayloadResponseDto"}}}],"required":["data"]}}}}},"summary":"Generate a Solana stake transaction payload","tags":["Solana"]}},"/solana/stake/performanceSummary":{"get":{"description":"Returns the 7D, 30D and total inflation and MEV rewards for the specified stake accounts.","operationId":"getSolanaStakePerformanceSummary","parameters":[{"name":"stakePubkey","required":false,"in":"query","description":"comma seperated list of stake account pubkeys, will return data for all active stake accounts if none are provided","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/SolanaStakingPerformanceSummary"}}}],"required":["data"]}}}}},"summary":"Get Solana stake performance summary","tags":["Solana"]}},"/solana/stake/dailyRewards":{"get":{"description":"Returns daily rewards stats of specified stake accounts.","operationId":"getSolanaStakeAccountDailyRewards","parameters":[{"name":"stakePubkey","required":true,"in":"query","description":"comma seperated list of stake account pubkeys","schema":{"type":"string"}},{"name":"currency","required":false,"in":"query","description":"fiat currency for solana pricing","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"unix timestamp of starting date from","schema":{"type":"number"}},{"name":"dateTo","required":false,"in":"query","description":"unix timestamp of ending date to","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SolanaStakeAccountRewards"}}}}],"required":["data"]}}}}},"summary":"Get daily rewards stats","tags":["Solana"]}},"/solana/stake/rewardsChartData":{"get":{"description":"Returns summarized Solana staking rewards data suitable for use in charts.","operationId":"getSolanaStakeRewardsChartData","parameters":[{"name":"stakePubkeys","required":false,"in":"query","description":"comma seperated list of stake pubkeys, will return all rewards if none are specified","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"unix timestamp of starting date from","schema":{"type":"number"}},{"name":"dateTo","required":false,"in":"query","description":"unix timestamp of ending date to","schema":{"type":"number"}},{"name":"datapoints","required":false,"in":"query","description":"number of datapoints to return, defaults to 30","schema":{"type":"number"}},{"name":"currency","required":false,"in":"query","description":"currency used for price data","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SolanaStakingRewardsChartData"}}}}],"required":["data"]}}}}},"summary":"Get staking rewards chart data","tags":["Solana"]}},"/solana/stake/networkInfo":{"get":{"description":"Returns information about the current epoch and inflation reward rate.","operationId":"getSolanaNetworkStakingInfo","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/SolanaStakingNetworkInfo"}}}],"required":["data"]}}}}},"summary":"Get current epoch staking reward info","tags":["Solana"]}},"/ethereum/stake":{"post":{"description":"\n  **DEPRECATED** use `/stakeV2` instead.\n\n\n  Request one or more new validators.\n  Validators created via this endpoint will have `0x01` withdrawal credentials.\n\n","operationId":"createStake","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStakeDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CreateStakeResponse"}}}],"required":["data"]}}}}},"summary":"[Deprecated] Create Capella-era (0x01) validator(s)","tags":["Ethereum"]}},"/ethereum/stakeV2":{"post":{"description":"\n  Request one or more new validators, returning the individual validator details in the response.\n  Validators created via this endpoint will have `0x01` withdrawal credentials.\n","operationId":"createEthereumStakeV2","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStakeDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CreateStakeV2Response"}}}],"required":["data"]}}}}},"summary":"Create Capella-era (0x01) validator(s)","tags":["Ethereum"]}},"/ethereum/stakeV3":{"post":{"description":"\n  Stake an arbitrary amount of ETH (Denoted in gwei) post-Pectra.\n\n  This endpoint will calculate and create the appropriate number of validators for the staked amount.\n\n  The data required for the deposit transaction will be returned in the response.\n\n  Validators created via this endpoint will have `0x02` withdrawal credentials.\n","operationId":"createEthereumStakeV3","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStakePectraDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CreateStakeV2Response"}}}],"required":["data"]}}}}},"summary":"Create Pectra-era (0x02) validator(s)","tags":["Ethereum"]}},"/ethereum/trackedWithdrawalAddresses":{"post":{"description":"Adds one or more withdrawal addresses that will be automatically monitored. Accepts either a single address object or an array of addresses. Any validators with these withdrawal addresses will be automatically added as external validators for the authenticated customer.","operationId":"addTrackedWithdrawalAddress","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"A single withdrawal address object or an array of withdrawal address objects to track","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AddTrackedWithdrawalAddressDto"},{"type":"array","items":{"$ref":"#/components/schemas/AddTrackedWithdrawalAddressDto"}}]},"examples":{"singleAddress":{"summary":"Single address","description":"Track a single withdrawal address","value":{"withdrawalAddress":"0x1234567890123456789012345678901234567890","label":"My External Validators","custodian":"BitGo","reference":"External Import","isActive":true}},"multipleAddresses":{"summary":"Multiple addresses","description":"Track multiple withdrawal addresses at once","value":[{"withdrawalAddress":"0x1234567890123456789012345678901234567890","label":"External Validators 1","custodian":"BitGo","reference":"External Import","isActive":true},{"withdrawalAddress":"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd","label":"External Validators 2","custodian":"Fireblocks","reference":"External Import","isActive":true}]}}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/TrackedWithdrawalAddressResponseDto"},{"type":"array","items":{"$ref":"#/components/schemas/TrackedWithdrawalAddressResponseDto"}}]}}}],"required":["data"]}}}}},"summary":"Add withdrawal address(es) to track for automatic external validator sync","tags":["Ethereum"]},"get":{"description":"Returns a list of all withdrawal addresses being tracked for automatic sync for the authenticated customer. Pass includeBalances=true to also return per-address stakedWei, idleWei, and totalWei.","operationId":"getTrackedWithdrawalAddresses","parameters":[{"name":"includeBalances","required":false,"in":"query","description":"When true, enrich each address with stakedWei, idleWei, and totalWei. Defaults to false.","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TrackedWithdrawalAddressResponseDto"}}}}],"required":["data"]}}}}},"summary":"Get all tracked withdrawal addresses for the current customer","tags":["Ethereum"]},"delete":{"description":"Removes one or more withdrawal addresses from tracking. This will stop automatic syncing of validators associated with these withdrawal addresses.","operationId":"removeTrackedWithdrawalAddress","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteTrackedWithdrawalAddressesDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DeleteTrackedAddressResultDto"}}}}],"required":["data"]}}}}},"summary":"Remove withdrawal address(es) from tracking for automatic external validator sync","tags":["Ethereum"]}},"/ethereum/trackedWithdrawalAddresses/custodians":{"get":{"description":"Returns a list of unique custodian names from tracked withdrawal addresses for the authenticated customer.","operationId":"getTrackedWithdrawalAddressCustodians","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CustodiansResponseDto"}}}],"required":["data"]}}}}},"summary":"Get all custodian names for the current customer","tags":["Ethereum"]}},"/ethereum/untrackedKnownAddresses":{"get":{"description":"Returns a list of wallet addresses from stakes and validators that are known to the system but not yet being tracked. Includes staked balance and idle (wallet) balance for each address.","operationId":"getUntrackedKnownAddresses","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UntrackedKnownAddressDto"}}}}],"required":["data"]}}}}},"summary":"Get known wallet addresses that are not yet tracked","tags":["Ethereum"]}},"/ethereum/stake/{stakeId}/abandon":{"put":{"description":"Abandon stake request and all associated validators.","operationId":"abandonEthereumStake","parameters":[{"name":"stakeId","required":true,"in":"path","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/DataWithMessage"}}}],"required":["data"]}}}}},"summary":"Abandon Stake","tags":["Ethereum"]}},"/ethereum/stake/{stakeId}":{"get":{"description":"Returns stake details and associated validators by stakeId.","operationId":"getEthereumStake","parameters":[{"name":"stakeId","required":true,"in":"path","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/StakeDetailsWithValidators"}}}],"required":["data"]}}}}},"summary":"Get Stake details by stakeId","tags":["Ethereum"]}},"/ethereum/stake/{stakeId}/depositdata":{"get":{"description":"Returns deposit data for all validators in the specified stake request.","operationId":"getEthereumDepositDataForStake","parameters":[{"name":"stakeId","required":true,"in":"path","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorDepositJson"}}}}],"required":["data"]}}}}},"summary":"Get deposit data for Stake","tags":["Ethereum"]}},"/ethereum/stakes":{"get":{"description":"Returns details of all staking requests for your account including withdrawal address, fee recipient, and validator details.","operationId":"getEthereumStakes","parameters":[{"name":"reference","required":false,"in":"query","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StakeDetailsWithValidators"}}}}],"required":["data"]}}}}},"summary":"Get Stakes","tags":["Ethereum"]}},"/ethereum/stakesWithValidatorStatusCounts":{"get":{"description":"Returns all staking requests with validator status counts.","operationId":"getEthereumStakesWithValidatorStatusCounts","parameters":[{"name":"reference","required":false,"in":"query","schema":{"type":"string"}},{"name":"withdrawalAddress","required":false,"in":"query","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StakeWithValidatorStatusCounts"}}}}],"required":["data"]}}}}},"summary":"Get Stakes with validator counts bystatus","tags":["Ethereum"]}},"/ethereum/orderedValidators":{"get":{"description":"Returns Validators for your account with filtering on reference, withdrawal address, and status. Records are returned in order of initial request.","operationId":"getEthereumOrderedValidators","parameters":[{"name":"reference","required":false,"in":"query","schema":{"type":"string"}},{"name":"withdrawalAddress","required":false,"in":"query","schema":{"type":"string"}},{"name":"count","required":false,"in":"query","description":"defaults to 100","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"skip","required":false,"in":"query","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorWithStakeDetails"}}}}],"required":["data"]}}}}},"summary":"Get Validators","tags":["Ethereum"]}},"/ethereum/genPresignedExitMsg":{"post":{"description":"Generate one or more pre-signed exit messages for a specified list of public keys.\nYou are not guaranteed one result per public key provided. \n\nErrors generating exit messages (usually caused by validator not being active or not being known to the system) will be handled silently \nand a result for this public key will not be included in the response.\n\nYour code should not assume one result per public key or consistent ordering of results.","operationId":"genEthereumPresignedExitMsg","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenPresignedExitMsgDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorExitMessageResp"}}}}],"required":["data"]}}}}},"summary":"Generate exit message(s)","tags":["Ethereum"]}},"/ethereum/broadcastPresignedExitMsg":{"post":{"description":"Broadcast one or more pre-signed exit messages to the beacon chain","operationId":"broadcastEthereumPresignedExitMessage","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorExitMessage"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BeaconNodeVoluntaryExitResponse"}}}],"required":["data"]}}}}},"summary":"Broadcast exit message(s)","tags":["Ethereum"]}},"/ethereum/bulkWithdrawValidators":{"post":{"description":"Generate pre-signed exit message(s) for a specified list of public keys and broadcast the message to a beacon node in a single request.","operationId":"bulkWithdrawEthereumValidators","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenPresignedExitMsgDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BulkWithdrawError"}}}}],"required":["data"]}}}}},"summary":"Bulk withdraw Validators","tags":["Ethereum"]}},"/ethereum/estimateWithdrawalTimes":{"post":{"description":"\n  This endpoint will simulate all pending withdrawals up to and including the specified validator indexes.\n\n  The simulation calculates the estimated exit as if the exit had been processed at that moment in time.\n\n  The results are indicative and can only account for the state of the exit queue at the time of simulating.\n\n  If this is being used optimise validator exits, caution should be taken since missing the `predictedExitSubmissionDeadlineEpoch` will result in the longest possible period of no rewards earned.\n\n  Submitting exit messages during the deadline epoch can be risky, some time (2-4 minutes) should be allowed for the beacon chain to process any exit messages broadcasted to the network. \n  \n  We recommend submitting exit messages at least an hour before the deadline epoch to account for unexpected changes to the exit queue. You should also consider the impact of your own withdrawals on the exit queue if you are exiting large amounts of validators at once.\n\n  This endpoint will return an error in the following situations:\n  \n  - one or more invalid validator indexes are passed\n  - one or more of the specified validators does not have withdrawal credentials set (0x01...)\n  - one or more validators has already exited\n  - one or more validators is not known to the beacon chain\n  \n  Below is a description of each of the fields returned:\n  - **expectedExitEpoch**\n    - the epoch in which the validator would exit the Beacon chain if its exit was processed at the current time\n  - **expectedFullWithdrawalEligibilityEpoch**\n    - the epoch where the validator would become eligible for receiving the full staked balance ETH plus any excess\n  - **predictedUpcomingWithdrawalEpoch**\n    - the predicted epoch in which the validator's withdrawal will be processed by the Beacon chain, taking the current exit queue into account\n  - **predictedExitSubmissionDeadlineEpoch**\n    - the deadline epoch in which the validator should already be queued for exiting the Beacon chain\n  ","operationId":"estimateEthereumWithdrawalTimes","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateWithdrawalTimesDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EstimatedWithdrawalTimes"}}}}],"required":["data"]}}}}},"summary":"Estimate validator exit times","tags":["Ethereum"]}},"/ethereum/validators/generateDepositData":{"post":{"description":"\n  Generate deposit transaction data (including signature) for one or more validators corresponding to the amount(s) specified in the request body.\n\n  ***Note that this will not replace nor invalidate the deposit data that is already stored on existing validator records***\n\n  This endpoint will return an error in the following situations:\n  \n  - an invalid amount is specified (<= 0 or > 32000000000, up to 2048000000000 for Pectra)\n  - one or more of the specified validators is not in a WAITING_DEPOSIT state\n  - one or more validators is not associated your account\n  - the list of specified validators contains duplicate pubkeys\n    ","operationId":"generateEthereumDepositData","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateDepositDataDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorDepositJson"}}}}],"required":["data"]}}}}},"summary":"Generate arbitrary amount deposit data","tags":["Ethereum"]}},"/ethereum/txcrafting/validators/topup":{"post":{"description":"\n  **This endpoint is only to be used with active 0x02 validators, using this to perform initial activation deposits will result in a loss of funds.**\n\n  Generate transaction data for depositing additional ETH to an active 0x02 validator.\n  \n  This endpoint will generate a transaction for interacting with the [canonical beacon deposit contract](https://etherscan.io/address/0x00000000219ab540356cBB839Cbe05303d7705Fa).\n\n  The generated transaction will contain a dummy signature and deposit data root [since signature validation is skipped for active validators](https://eth2book.info/capella/part2/deposits-withdrawals/staking/#top-up-deposits).\n    \n  The returned transaction data must be signed and broadcast by the user.\n  ","operationId":"craftEthereumValidatorTopupTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthereumValidatorTopupDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate validator top-up transaction","tags":["Ethereum"]}},"/ethereum/txcrafting/validators/batchtopup":{"post":{"description":"\n  **This endpoint is only to be used with active 0x02 validators, using this to perform initial activation deposits will result in a loss of funds.**\n\n  Generate transaction data for depositing additional ETH to multiple active 0x02 validators.\n  \n  This endpoint will generate a transaction for interacting with our [pectra batch deposit implementation](https://docs.piertwo.com/docs/batch-deposit-contract).\n\n  The generated transaction will contain a dummy signature and deposit data root [since signature validation is skipped for active validators](https://eth2book.info/capella/part2/deposits-withdrawals/staking/#top-up-deposits).\n\n  The returned transaction data must be signed and broadcast by the user.\n    ","operationId":"craftEthereumValidatorBatchTopupTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthereumValidatorBatchTopupDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate batch validator top-up transaction","tags":["Ethereum"]}},"/ethereum/txcrafting/validators/deposit":{"post":{"description":"\n  Generate transaction data for depositing ETH to a single validator that is not yet active.\n  \n  This endpoint will generate a transaction for interacting with the [canonical beacon deposit contract](https://etherscan.io/address/0x00000000219ab540356cBB839Cbe05303d7705Fa).\n    \n  The returned transaction data must be signed and broadcast by the user.\n  ","operationId":"craftEthereumValidatorDepositTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthereumValidatorDepositDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate initial validator deposit transaction","tags":["Ethereum"]}},"/ethereum/txcrafting/validators/batchdeposit":{"post":{"description":"\n  Generate transaction data for depositing ETH to multiple validators that are not yet active.\n  \n  This endpoint will generate a transaction for interacting with our [pectra batch deposit implementation](https://docs.piertwo.com/docs/batch-deposit-contract).\n\n  The returned transaction data must be signed and broadcast by the user.\n    ","operationId":"craftEthereumValidatorBatchDepositTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthereumValidatorBatchDepositDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate batch initialvalidator deposit transaction","tags":["Ethereum"]}},"/ethereum/txcrafting/validators/withdraw":{"post":{"description":"\n  Generate transaction data for performing an [EIP 7002 on-chain validator withdrawal](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7002.md#abstract).\n  \n  This can be used to withdraw accrued rewards exceeding 32 ETH. \n  \n  The withdrawal amount will be capped such that the validator balance does not fall below 32 ETH.\n\n  This can be used to perform a full exit by specifying an amount of 0. \n  \n  The returned transaction data must be signed and broadcast by the user.\n    ","operationId":"craftEthereumValidatorWithdrawTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthereumValidatorWithdrawDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate validator withdrawal transaction","tags":["Ethereum"]}},"/ethereum/txcrafting/validators/consolidate":{"post":{"description":"\n  Generate transaction data for performing an [EIP 7251 on-chain validator consolidation](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7251.md#abstract).\n  \n  This can be used to upgrade a single validator by specifying itself as both the source and target.\n  \n  Or to combine 2 active validators into a single validator.\n\n  The consolidation transaction must be signed and submitted by the address controlling the source validator (the configured withdrawal address).  \n    ","operationId":"craftEthereumValidatorConsolidateTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthereumValidatorConsolidateDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate validator consolidation transaction","tags":["Ethereum"]}},"/ethereum/validators/queueStats":{"get":{"description":"Returns the estimated wait times and other queue stats for entering and exiting validators.","operationId":"getEthereumValidatorQueueStats","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/QueueStats"}}}],"required":["data"]}}}}},"summary":"Get Validator queue","tags":["Ethereum"]}},"/ethereum/validators/info":{"get":{"description":"Returns beacon chain information of validators, returns info for all active validators if none are specified.","operationId":"getEthereumValidatorInfo","parameters":[{"name":"validatorIndex","required":false,"in":"query","description":"comma seperated list of validator indexes","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorInfo"}}}}],"required":["data"]}}}}},"summary":"Get Validator beacon chain info","tags":["Ethereum"]}},"/ethereum/validators/dailyRewards":{"get":{"description":"Returns daily rewards stats of validators, returns stats for all active validators if none are specified","operationId":"getEthereumValidatorDailyRewards","parameters":[{"name":"validatorIndex","required":false,"in":"query","description":"comma seperated list of validator indexes","schema":{"type":"string"}},{"name":"currency","required":false,"in":"query","description":"fiat currency for ethereum pricing","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"unix timestamp of starting date from","schema":{"type":"number"}},{"name":"dateTo","required":false,"in":"query","description":"unix timestamp of ending date to","schema":{"type":"number"}},{"name":"waitForDataSync","required":false,"in":"query","description":"whether or not to wait for data sync","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","description":"data source version, v1 = daily balance snapshot, v2 = income details","schema":{"type":"string"}},{"name":"timezone","required":false,"in":"query","description":"timezone to use for grouping individual line items by start of day, only applies to v2","schema":{"default":"Etc/UTC","type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorDailyRewardDto"}}}}],"required":["data"]}}}}},"summary":"Get Validator daily rewards","tags":["Ethereum"]}},"/ethereum/validators/performance":{"get":{"description":"Returns daily performance stats of validators, returns stats for all active validators if none are specified","operationId":"getEthereumValidatorDailyPerformance","parameters":[{"name":"validatorIndex","required":false,"in":"query","description":"comma seperated list of validator indexes","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorPerformance"}}}}],"required":["data"]}}}}},"summary":"Get Validator daily performance","tags":["Ethereum"]}},"/ethereum/validators/rewardsChartData":{"get":{"description":"Returns summarized validator rewards data suitable for use in charts.","operationId":"getEthereumValidatorRewardsChartData","parameters":[{"name":"validatorIds","required":false,"in":"query","description":"comma seperated list of validator indexes","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"unix timestamp of starting date from","schema":{"type":"number"}},{"name":"dateTo","required":false,"in":"query","description":"unix timestamp of ending date to","schema":{"type":"number"}},{"name":"account","required":false,"in":"query","description":"account reference to use as filter","schema":{"type":"string"}},{"name":"datapoints","required":false,"in":"query","description":"number of datapoints to return","schema":{"type":"number"}},{"name":"currency","required":false,"in":"query","description":"currency used for price data","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","description":"data source version, v1 = daily balance snapshot, v2 = income details","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorDailyPerformanceStat"}}}}],"required":["data"]}}}}},"summary":"Get staking rewards chart data","tags":["Ethereum"]}},"/ethereum/validators/dashboard":{"get":{"description":"Returns the dashboard summary. Individual stakes are flattened","operationId":"getEthereumValidatorDashboardSummary","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CustomerDashboard"}}}],"required":["data"]}}}}},"summary":"Get Staking dashboard summary","tags":["Ethereum"]}},"/ethereum/wallets/dashboard/summary":{"get":{"description":"Returns the wallets dashboard summary for quick TTFP. Includes total custodians, addresses, value, and staked/idle breakdown.","operationId":"getWalletsDashboardSummary","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/WalletsDashboardSummary"}}}],"required":["data"]}}}}},"summary":"Get Wallets Dashboard Summary","tags":["Ethereum"]}},"/ethereum/wallets/dashboard/custodians":{"get":{"description":"Returns the detailed wallet custodian breakdown for the donut chart and list view.","operationId":"getWalletsDashboardCustodians","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WalletCustodian"}}}}],"required":["data"]}}}}},"summary":"Get Wallets Dashboard Custodians","tags":["Ethereum"]}},"/ethereum/wallets/dashboard/apr-comparison":{"get":{"description":"Returns APR comparison data for PierTwo, External, and CESR (network average) over time as part of the wallets dashboard. Supports 1Y, 1M, and 1W time ranges.","operationId":"getWalletsDashboardAprComparison","parameters":[{"name":"timeRange","required":true,"in":"query","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/AprComparisonResponse"}}}],"required":["data"]}}}}},"summary":"Get Wallets Dashboard APR Comparison","tags":["Ethereum"]}},"/ethereum/wallets/dashboard":{"get":{"description":"Returns the complete wallets dashboard with custodian breakdown, staked vs idle ETH, and PierTwo vs External staking. For backward compatibility - consider using /summary and /custodians endpoints separately for better TTFP.","operationId":"getWalletsDashboard","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/WalletsDashboard"}}}],"required":["data"]}}}}},"summary":"Get Wallets Dashboard (Complete)","tags":["Ethereum"]}},"/ethereum/validators/accounts":{"get":{"description":"Returns the accounts summary. Individual stakes are not flattened","operationId":"getEthereumValidatorAccountsSummary","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomerAccount"}}}}],"required":["data"]}}}}},"summary":"Get Staking accounts summary","tags":["Ethereum"]}},"/ethereum/validators/incomeHistory":{"get":{"description":"Returns validator income history for a given time frame and validator indices","operationId":"getEthereumValidatorIncomeHistory","parameters":[{"name":"timeFrame","required":true,"in":"query","description":"Time frame for the data: 1D (1 day in 1-hour chunks) or 1W (1 week in 6-hour chunks)","schema":{"enum":["1D","1W"],"type":"string"}},{"name":"validatorIds","required":false,"in":"query","description":"comma seperated list of validator indexes","schema":{"type":"string"}},{"name":"account","required":false,"in":"query","description":"account reference to use as filter","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorIncomeHistory"}}}}],"required":["data"]}}}}},"summary":"Get Validator income history","tags":["Ethereum"]}},"/ethereum/validators/fromBeaconChain/{validatorIndex}":{"get":{"description":"Get validator information directly from the beacon chain API (beaconchain.io) by validator index. This queries the public beacon chain, not the internal database.","operationId":"getValidatorByIndexFromBeaconChain","parameters":[{"name":"validatorIndex","required":true,"in":"path","description":"The validator index to query on the beacon chain","schema":{"example":"123456","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BeaconChainValidatorDto"}}}],"required":["data"]}}}}},"summary":"Get validator by index from beacon chain","tags":["Ethereum"]}},"/ethereum/validators/addExternalValidatorForCustomer":{"post":{"description":"Add an external validator to the database for a specific customer","operationId":"addExternalValidatorForCustomer","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddExternalValidatorForCustomerDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/AddExternalValidatorForCustomerDto"}}}],"required":["data"]}}}}},"summary":"Add an external validator for a specific customer","tags":["Ethereum"]}},"/ethereum/validators/byWithdrawalAddress/{withdrawalAddress}":{"get":{"operationId":"EthereumController_getValidatorsByWithdrawalAddress","parameters":[{"name":"withdrawalAddress","required":true,"in":"path","description":"The withdrawal address to query","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetValidatorsByWithdrawalAddressResponseDto"}}}],"required":["data"]}}}}},"tags":["Ethereum"]}},"/ethereum/consolidations/validate":{"post":{"description":"Validates a consolidation request by checking for conflicts, balance limits, and ownership. Does not submit any transactions.","operationId":"EthereumController_validateConsolidation","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateConsolidationRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/ValidateConsolidationResponseDto"}}}],"required":["data"]}}}}},"summary":"Validate consolidation request","tags":["Ethereum"]}},"/bitcoin/utxos/{address}":{"get":{"description":"Get UTXOs for a given bitcoin address","operationId":"getBitcoinAddressUtxos","parameters":[{"name":"address","required":true,"in":"path","description":"Bitcoin address to get UTXOs for","schema":{"example":"bc1...","type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GetBitcoinAddressUtxos"}}}}],"required":["data"]}}}}},"summary":"Get UTXOs for a given bitcoin address. Only available on testnet","tags":["Bitcoin"]}},"/bitcoin/buildStakingTransaction":{"post":{"description":"Build a bitcoin staking transaction for use with the post-stake flow. Only available on testnet","operationId":"buildBabylonStakingTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildBabylonStakingTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BuildBabylonStakingTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Build a post-stake bitcoin staking transaction","tags":["Bitcoin"]}},"/bitcoin/submitStakingTransaction":{"post":{"description":"Submit a signed staking transaction for broadcasting to the Bitcoin network using the post-stake flow. Only available on testnet","operationId":"submitBabylonStakingTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitBabylonStakingTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BitcoinTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Broadcast a signed bitcoin staking transaction for use with the post-stake flow","tags":["Bitcoin"]}},"/bitcoin/getDelegationPayloads":{"post":{"description":"Get delegation payloads for a given staking transaction ID. Only available on testnet","operationId":"getBabylonDelegationPayloads","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBabylonDelegationPayloadsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetBabylonDelegationPayloadsResponseDto"}}}],"required":["data"]}}}}},"summary":"Get delegation payloads","tags":["Bitcoin"]}},"/bitcoin/buildRegistrationTransaction":{"post":{"description":"Build a babylon registration transaction for an existing stake as part of the post-stake flow. Only available on testnet","operationId":"buildBabylonRegistrationTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildBabylonRegistrationTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BuildBabylonRegistrationTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Build a post-stake babylon registration transaction","tags":["Bitcoin"]}},"/bitcoin/stakingStatus/{stakingTxId}":{"get":{"description":"Get the status of a staking transaction. Only available on testnet","operationId":"getBabylonStakingStatus","parameters":[{"name":"stakingTxId","required":true,"in":"path","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetBabylonStakingStatusResponseDto"}}}],"required":["data"]}}}}},"summary":"Get the status of a staking transaction","tags":["Bitcoin"]}},"/bitcoin/buildUnbondingTransaction":{"post":{"description":"Build an unbonding transaction PSBT. Only available on testnet","operationId":"buildBabylonUnbondingTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BabylonStakingTxRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BuildBabylonUnbondingTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Build an unbonding transaction PSBT that needs to be signed by the staker.","tags":["Bitcoin"]}},"/bitcoin/submitUnbondingTransaction":{"post":{"description":"Submit a staker-signed unbonding transaction PSBT. Only available on testnet","operationId":"submitBabylonUnbondingTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitBabylonUnbondingTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BitcoinTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Submit a staker-signed unbonding transaction PSBT for processing with covenant signatures and broadcasting.","tags":["Bitcoin"]}},"/bitcoin/buildWithdrawalTransaction":{"post":{"description":"Build a withdrawal transaction PSBT for withdrawing funds from unbonded or expired stakes. Only available on testnet","operationId":"buildBabylonWithdrawalTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildBabylonWithdrawalTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BuildBabylonWithdrawalTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Build a withdrawal transaction PSBT","tags":["Bitcoin"]}},"/bitcoin/submitWithdrawalTransaction":{"post":{"description":"Submit a signed withdrawal transaction for broadcasting to the Bitcoin network. Only available on testnet","operationId":"submitBabylonWithdrawalTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitBabylonWithdrawalTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BitcoinTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Submit a signed withdrawal transaction for broadcasting to the Bitcoin network","tags":["Bitcoin"]}},"/bitcoin/stakingParams":{"get":{"description":"Get current staking parameters including confirmation requirements. Only available on testnet","operationId":"getBabylonStakingParams","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetBabylonStakingParamsResponseDto"}}}],"required":["data"]}}}}},"summary":"Get current babylon staking protocol parameters","tags":["Bitcoin"]}},"/bitcoin/stakingDetails":{"get":{"description":"Get all staking details for your account. Only available on testnet","operationId":"getBabylonStakingDetails","parameters":[{"name":"address","required":false,"in":"query","description":"Bitcoin address","schema":{"type":"string"}},{"name":"pageNumber","required":false,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":false,"in":"query","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetBabylonStakingDetailsResponseDto"}}}],"required":["data"]}}}}},"summary":"Get all staking details for your account","tags":["Bitcoin"]}},"/bitcoin/buildPreStakeStakingTransaction":{"post":{"description":"Build an unsigned pre-stake staking transaction PSBT that needs to be signed by the staker. Only available on testnet","operationId":"buildBabylonPreStakeStakingTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildBabylonPreStakeRegistrationDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BuildBabylonPreStakeRegistrationResponseDto"}}}],"required":["data"]}}}}},"summary":"Build an unsigned pre-stake staking transaction PSBT","tags":["Bitcoin"]}},"/bitcoin/getDelegationPayloadsPreStake":{"post":{"description":"Get delegation payloads for pre-stake using the unsigned staking transaction. Only available on testnet","operationId":"getBabylonDelegationPayloadsPreStake","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBabylonDelegationPayloadsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/GetBabylonDelegationPayloadsResponseDto"}}}],"required":["data"]}}}}},"summary":"Get delegation payloads for pre-stake","tags":["Bitcoin"]}},"/bitcoin/buildBabylonPreStakeTransaction":{"post":{"description":"Build a Babylon pre-stake transaction with signed delegation payloads. Only available on testnet","operationId":"buildBabylonPreStakeTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildBabylonPreStakeTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/BuildBabylonPreStakeTransactionResponseDto"}}}],"required":["data"]}}}}},"summary":"Build a Babylon pre-stake transaction with signed delegation payloads","tags":["Bitcoin"]}},"/bitcoin/submitPreStakeRegistration":{"post":{"description":"Submit a signed pre-stake registration to Babylon for covenant verification. Only available on testnet","operationId":"submitBabylonPreStakeRegistration","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitBabylonPreStakeRegistrationDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/SubmitBabylonPreStakeRegistrationResponseDto"}}}],"required":["data"]}}}}},"summary":"Submit a signed pre-stake registration to Babylon for covenant verification","tags":["Bitcoin"]}},"/bitcoin/finalizePreStake":{"post":{"description":"Finalize a verified pre-stake by broadcasting the Bitcoin staking transaction. Only available on testnet","operationId":"finalizeBabylonPreStake","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinalizeBabylonPreStakeDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/FinalizeBabylonPreStakeResponseDto"}}}],"required":["data"]}}}}},"summary":"Broadcast and finalize a verified pre-stake Bitcoin staking transaction","tags":["Bitcoin"]}},"/activity/history":{"get":{"description":"Get transaction history for a user across Ethereum and Solana blockchains. Returns a paginated list of transactions including deposits, withdrawals, stake creations, and status changes.","operationId":"getActivityHistory","parameters":[{"name":"blockchain","required":false,"in":"query","description":"Filter by blockchain (ethereum, solana, or all)","schema":{"enum":["ethereum","solana","all"],"type":"string"}},{"name":"pageSize","required":false,"in":"query","description":"Number of records per page","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"pageNumber","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActivityHistoryItem"}}}}],"required":["data"]}}}}},"summary":"Get activity history","tags":["Activity"]}},"/public/websiteData":{"get":{"description":"get data for rendering network statistics (asset prices, assets UAM, etc)","operationId":"getWebsiteData","parameters":[{"name":"currency","required":false,"in":"query","description":"currency used for price data (`usd` by default)","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/WebsiteData"}}}],"required":["data"]}}}}},"summary":"Get Pier Two Public Data","tags":["Public"]}},"/public/networkConfig":{"get":{"description":"get static network config such as chain id, contract addresses, operator addresses, etc","operationId":"networkConfig","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/PierTwoInfo"}}}],"required":["data"]}}}}},"summary":"Get Network Config","tags":["Public"]}},"/public/systemInfo":{"get":{"description":"Get system information including API versions","operationId":"getSystemInfo","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/SystemInfoResponse"}}}],"required":["data"]}}}}},"summary":"Get System Info","tags":["Public"]}},"/public/supportedCurrencies":{"get":{"description":"Get supported currency symbols for reporting (chart data and rewards data exports)","operationId":"supportedCurrencies","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"type":"string"}}}}],"required":["data"]}}}}},"summary":"Get Supported Currencies","tags":["Public"]}},"/cardano/stakes":{"get":{"description":"Returns the details of Cardano staking positions for your account.","operationId":"getCardanoStakes","parameters":[{"name":"pageNumber","required":false,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":false,"in":"query","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CardanoStakeAccount"}}}}],"required":["data"]}}}}},"summary":"Get Cardano Stake Accounts","tags":["Cardano"]}},"/cardano/stake/performanceSummary":{"get":{"description":"Returns the 7D, 30D and total staking and MEV rewards for the specified stake accounts.","operationId":"getCardanoStakePerformanceSummary","parameters":[{"name":"stakeAccountAddress","required":false,"in":"query","description":"comma seperated list of stake account addresses, will return data for all active stake accounts if none are provided","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoStakingPerformanceSummary"}}}],"required":["data"]}}}}},"summary":"Get Cardano stake performance summary","tags":["Cardano"]}},"/cardano/stake/dailyRewards":{"get":{"description":"Returns daily rewards stats of specified stake accounts.","operationId":"getCardanoStakeAccountDailyRewards","parameters":[{"name":"stakeAccountAddress","required":true,"in":"query","description":"comma seperated list of stake account addresses","schema":{"type":"string"}},{"name":"currency","required":false,"in":"query","description":"fiat currency for ada pricing","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"unix timestamp of starting date from","schema":{"type":"number"}},{"name":"dateTo","required":false,"in":"query","description":"unix timestamp of ending date to","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CardanoStakeAccountRewards"}}}}],"required":["data"]}}}}},"summary":"Get daily rewards stats","tags":["Cardano"]}},"/cardano/stake/account":{"post":{"description":"Add a known Cardano stake account to your account","operationId":"addCardanoStakeAccount","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCardanoStakeAccountDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoStakeAccount"}}}],"required":["data"]}}}}},"summary":"Add Cardano Stake Account","tags":["Cardano"]}},"/cardano/txcrafting/registerStakeAddress":{"post":{"description":"\nCraft a transaction for registering a Cardano stake address and add it to your account\n\nThe stake account will be automatically added to your account for tracking.\n\nThis will deposit 2 ADA from the utxoAddress into the Stake Address, which is required by the protocol.\n\n***This transaction must be signed by the owner of the UTXO's being spent into this transaction (utxoAddress)***\n","operationId":"craftCardanoRegisterStakeAddressTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoRegisterStakeAddressDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoTransactionCraftingResponse"}}}],"required":["data"]}}}}},"summary":"Craft Cardano Stake Address Registration Transaction","tags":["Cardano"]}},"/cardano/txcrafting/deregisterStakeAddress":{"post":{"description":"\nCraft a transaction for deregistering a Cardano stake address\n\n***This transaction must be signed by the owner of the UTXO's being spent into this transaction (utxoAddress) as well as your Stake Key***\n","operationId":"craftCardanoDeregisterStakeAddressTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoDeregisterStakeAddressDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoTransactionCraftingResponse"}}}],"required":["data"]}}}}},"summary":"Craft Cardano Stake Address Deregistration Transaction","tags":["Cardano"]}},"/cardano/txcrafting/delegateStake":{"post":{"description":"\nCraft a transaction for delegating stake to a Cardano stake pool and add it to your account\n\nThe stake account will be automatically added to your account for tracking.\n\n***This transaction must be signed by the owner of the UTXO's being spent into this transaction (utxoAddress) as well as your Stake Key***\n","operationId":"craftCardanoDelegateStakeTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoDelegateStakeDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoTransactionCraftingResponse"}}}],"required":["data"]}}}}},"summary":"Craft Cardano Stake Delegation Transaction","tags":["Cardano"]}},"/cardano/txcrafting/registerAndDelegate":{"post":{"description":"\nCraft a transaction for registering and delegating stake to a Cardano stake pool in a single transaction and add it to your account\n\nThe stake account will be automatically added to your account for tracking.\n\nThis will deposit 2 ADA from the utxoAddress into the Stake Address, which is required by the protocol.\n\n***This transaction must be signed by the owner of the UTXO's being spent into this transaction (utxoAddress) as well as your Stake Key***\n","operationId":"craftCardanoRegisterAndDelegateTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoRegisterAndDelegateDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoTransactionCraftingResponse"}}}],"required":["data"]}}}}},"summary":"Craft Cardano Register and Delegate Transaction","tags":["Cardano"]}},"/cardano/txcrafting/stakingRewardsWithdrawal":{"post":{"description":"\nCraft a transaction for withdrawing rewards from your Stake Address\n\n***This transaction must be signed by the owner of the UTXO's being spent into this transaction (utxoAddress) as well as your Stake Key***\n","operationId":"craftCardanoStakingRewardsWithdrawalTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoStakingRewardsWithdrawalDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoTransactionCraftingResponse"}}}],"required":["data"]}}}}},"summary":"Craft Cardano Stake Rewards Withdrawal Transaction","tags":["Cardano"]}},"/cardano/submitSignedTx":{"post":{"description":"Submit a signed Cardano transaction to the network","operationId":"submitCardanoTransaction","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitCardanoTransactionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoTransactionSubmissionResponse"}}}],"required":["data"]}}}}},"summary":"Submit Signed Cardano Transaction","tags":["Cardano"]}},"/cardano/txStatus/{txHash}":{"get":{"description":"Get the status of a Cardano transaction by the tx hash","operationId":"getCardanoTransactionStatus","parameters":[{"name":"txHash","required":true,"in":"path","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/CardanoTransactionStatusResponse"}}}],"required":["data"]}}}}},"summary":"Get Cardano Transaction Status","tags":["Cardano"]}},"/lsEth/register":{"post":{"description":"Register user for liquid staking ETH services","operationId":"registerLsEth","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/RegisterLsEthResponse"}}}],"required":["data"]}}}}},"summary":"Register for liquid staking","tags":["LsEth"]}},"/lsEth/registrationStatus":{"get":{"description":"Check if user is registered for liquid staking ETH services","operationId":"checkLsEthRegistration","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/RegistrationStatusResponse"}}}],"required":["data"]}}}}},"summary":"Check liquid staking registration status","tags":["LsEth"]}},"/lsEth/wallet/add/challenge":{"post":{"description":"Generate a message with nonce that must be signed to prove wallet ownership","operationId":"addLsEthWalletChallenge","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LsEthWalletChallengeRequest"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthWalletChallengeResponse"}}}],"required":["data"]}}}}},"summary":"Generate wallet ownership challenge","tags":["LsEth"]}},"/lsEth/wallet/add/verify":{"post":{"description":"Verify signed challenge and add wallet to Alluvial platform","operationId":"addLsEthWalletVerify","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LsEthWalletVerifyRequest"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthWalletVerifyResponse"}}}],"required":["data"]}}}}},"summary":"Verify wallet ownership and add wallet","tags":["LsEth"]}},"/lsEth/wallets":{"get":{"description":"List all wallets associated with the user account with pagination support","operationId":"listLsEthWallets","parameters":[{"name":"allowlist","required":false,"in":"query","description":"Enable to only return allowlisted wallets","schema":{"example":true,"type":"boolean"}},{"name":"onPlatform","required":false,"in":"query","description":"Enable to only return wallets on platform","schema":{"example":true,"type":"boolean"}},{"name":"offset","required":false,"in":"query","description":"Offset for pagination","schema":{"minimum":0,"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Limit for pagination","schema":{"minimum":1,"maximum":100,"example":20,"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthListWalletsResponse"}}}],"required":["data"]}}}}},"summary":"List user wallets","tags":["LsEth"]}},"/lsEth/protocolStats":{"get":{"description":"Get high-level current lsETH protocol statistics including conversion rate, staking rewards, and supply metrics","operationId":"getLsEthProtocolStats","parameters":[{"name":"unit","required":false,"in":"query","description":"Display lsETH values in units of wei. Defaults to ETH/lsETH with decimal representation if not specified.","schema":{"enum":["wei"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthProtocolStatsResponse"}}}],"required":["data"]}}}}},"summary":"Get lsETH protocol statistics","tags":["LsEth"]}},"/lsEth/txcrafting/deposit":{"post":{"description":"Generate transaction data for depositing ETH to receive lsETH tokens","operationId":"craftLsEthDepositTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LsEthDepositDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate lsETH deposit transaction","tags":["LsEth"]}},"/lsEth/txcrafting/redeem":{"post":{"description":"Generate transaction data for redeeming lsETH tokens to receive ETH","operationId":"craftLsEthRedeemTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LsEthRedeemDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate lsETH redemption transaction","tags":["LsEth"]}},"/lsEth/balance":{"get":{"description":"Get the lsETH and ETH balance for a wallet address linked to your account","operationId":"getLsEthWalletBalance","parameters":[{"name":"address","required":true,"in":"query","description":"Wallet address to check balance for (must be linked to your account)","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthWalletBalanceResponse"}}}],"required":["data"]}}}}},"summary":"Get wallet lsETH and ETH balance","tags":["LsEth"]}},"/lsEth/redeems":{"get":{"description":"List all redemption requests for your wallets or a specific wallet","operationId":"listLsEthRedeems","parameters":[{"name":"walletAddress","required":false,"in":"query","description":"Optional wallet address to filter redemptions (must be linked to your account)","schema":{"type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthListRedeemsResponse"}}}],"required":["data"]}}}}},"summary":"List redemption requests","tags":["LsEth"]}},"/lsEth/redeems/{id}":{"get":{"description":"Get details of a specific redemption request","operationId":"getLsEthRedeemDetails","parameters":[{"name":"id","required":true,"in":"path","description":"Redemption request ID","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthRedeemDetailsResponse"}}}],"required":["data"]}}}}},"summary":"Get redemption request details","tags":["LsEth"]}},"/lsEth/redeems/{id}/projection":{"get":{"description":"Get estimated timing for when a redemption request will be satisfied","operationId":"getLsEthRedeemProjection","parameters":[{"name":"id","required":true,"in":"path","description":"Redemption request ID","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthRedeemProjectionResponse"}}}],"required":["data"]}}}}},"summary":"Get redemption timing projection","tags":["LsEth"]}},"/lsEth/txcrafting/claim":{"post":{"description":"Generate transaction data for claiming ETH from satisfied redemption requests","operationId":"craftLsEthClaimRedeemTx","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LsEthClaimRedeemDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}}}],"required":["data"]}}}}},"summary":"Generate claim redemption transaction","tags":["LsEth"]}},"/lsEth/transactions":{"get":{"description":"Get transaction history for a specific wallet address linked to your account","operationId":"getLsEthWalletTransactionHistory","parameters":[{"name":"address","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":false,"in":"query","description":"Start date for transaction history (ISO format)","schema":{"example":"2025-01-01T00:00:00Z","type":"string"}},{"name":"to","required":false,"in":"query","description":"End date for transaction history (ISO format)","schema":{"example":"2025-12-31T23:59:59Z","type":"string"}},{"name":"pageSize","required":false,"in":"query","description":"Number of transactions per page (default: 100)","schema":{"default":100,"example":50,"type":"number"}},{"name":"nextCursor","required":false,"in":"query","description":"Pagination cursor for next page","schema":{"example":"eyJhZnRlciI6IjIwMjUtMDctMjkifQ==","type":"string"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthWalletTransactionHistoryResponse"}}}],"required":["data"]}}}}},"summary":"Get wallet transaction history","tags":["LsEth"]}},"/lsEth/activity":{"get":{"description":"Get combined transaction and redemption history from all allowlisted wallets, sorted by date","operationId":"getLsEthAggregateActivity","parameters":[{"name":"limit","required":false,"in":"query","description":"Maximum number of activities to return (optional)","schema":{"type":"number"}},{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthAggregateActivityResponse"}}}],"required":["data"]}}}}},"summary":"Get aggregate activity across all wallets","tags":["LsEth"]}},"/lsEth/redeemManagerInfo":{"get":{"description":"Get information about the redeem manager including queue and withdrawal stack amounts","operationId":"getLsEthRedeemManagerInfo","parameters":[{"name":"api-key","in":"header","description":"piertwo api key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiResponseBase"},{"properties":{"data":{"$ref":"#/components/schemas/LsEthRedeemManagerInfoResponse"}}}],"required":["data"]}}}}},"summary":"Get redeem manager information","tags":["LsEth"]}}},"info":{"title":"Pier Two Staking API","description":"The Pier Two Staking API Docs","version":"1.0.152-develop-testnet","contact":{}},"tags":[],"servers":[{"url":"https://gw-1.api.test.piertwo.io"}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","in":"header","name":"api-key"}},"schemas":{"ApiResponseBase":{"type":"object","properties":{"data":{"type":"object"},"message":{"type":"string"}},"required":["data"]},"AuthorizedEmail":{"type":"object","properties":{"emailAddress":{"type":"string","example":"myteammember@piertwo.com"}},"required":["emailAddress"]},"GetAccountResponse":{"type":"object","properties":{"customerName":{"type":"string","example":"Pierre Toosen"},"companyName":{"type":"string","example":"Pier Two"},"onboardingStatus":{"type":"string","example":"completed","enum":["completed","skipped","pending"]},"emailAddress":{"type":"string","example":"staking@piertwo.com"},"mnemonicStatus":{"type":"string","example":"ACTIVE","description":"Status of your automatically generated mnemonic. This status must be ACTIVE before you can request a validator"},"kycStatus":{"type":"string","example":"KYC_PENDING","description":"Status of the accounts KYC/KYB application"},"region":{"type":"string","example":"US","description":"User region as ISO 3166-1 alpha-2 country code"},"termsAndConditions":{"type":"object","example":{"applicableTerms":"general","agreedTerms":{"29-05-2024":"2024-08-19T22:35:52.622Z"}},"description":"Details of agreed terms and conditions"},"authorizedLogins":{"type":"array","items":{"$ref":"#/components/schemas/AuthorizedEmail"}}},"required":["customerName","companyName","emailAddress","mnemonicStatus","kycStatus","region","termsAndConditions","authorizedLogins"]},"ApiRoles":{"type":"object","properties":{"admin":{"type":"boolean","description":"Full access to all operations"},"staker":{"type":"boolean","description":"Access to everything except team member management and API key management"},"reader":{"type":"boolean","description":"Read-only access across all staking networks"}}},"AccessibleAccountResponse":{"type":"object","properties":{"customerId":{"type":"number","example":42},"emailAddress":{"type":"string","example":"staking@piertwo.com"},"companyName":{"type":"string","example":"Pier Two"},"customerName":{"type":"string","example":"Pierre Toosen"},"roles":{"$ref":"#/components/schemas/ApiRoles"}},"required":["customerId","emailAddress","companyName","customerName","roles"]},"OnboardingResponseDto":{"type":"object","properties":{"customerName":{"type":"string","description":"Customer name (full name)","example":"Satoshi Nakamoto"},"companyName":{"type":"string","description":"Company name","example":"Bitcoin Foundation"},"onboardingStatus":{"type":"string","description":"Onboarding status","enum":["completed","skipped","pending"],"example":"completed"}}},"OnboardingRequestDto":{"type":"object","properties":{"customerName":{"type":"string","description":"Customer name (full name)","example":"Satoshi Nakamoto"},"companyName":{"type":"string","description":"Company name","example":"Bitcoin Foundation"},"onboardingStatus":{"type":"string","description":"Onboarding status","enum":["completed","skipped","pending"],"example":"completed"}},"required":["onboardingStatus"]},"IpRestrictionDto":{"type":"object","properties":{"allowedCidrs":{"description":"List of allowed CIDR ranges (IPv4 and IPv6 supported). Singular IPs must be encoded as host CIDRs (IPv4 /32, IPv6 /128).","example":["192.168.1.0/24","10.0.0.50/32","2001:db8::/32","::1/128"],"type":"array","items":{"type":"string"}}},"required":["allowedCidrs"]},"IpRestrictionConfigDto":{"type":"object","properties":{"restrictions":{"description":"IP restriction rules","allOf":[{"$ref":"#/components/schemas/IpRestrictionDto"}]}},"required":["restrictions"]},"GetApiKeyDto":{"type":"object","properties":{"keyId":{"type":"string","example":"66f181818181818181818181","description":"Internal id of the API key"},"name":{"type":"string","example":"Default API Key"},"key":{"type":"string","example":"0b381d39-43b4-480f-b3c9-f3ff3d19cb0a"},"deletedAt":{"format":"date-time","type":"string"},"roles":{"$ref":"#/components/schemas/ApiRoles"},"ipRestrictions":{"description":"IP restrictions for this API key","allOf":[{"$ref":"#/components/schemas/IpRestrictionConfigDto"}]}},"required":["keyId","name","key","roles"]},"CreateApiKeyDto":{"type":"object","properties":{"name":{"type":"string","example":"Default API Key"},"roles":{"$ref":"#/components/schemas/ApiRoles"},"ipRestrictions":{"description":"IP restriction configuration for the API key","allOf":[{"$ref":"#/components/schemas/IpRestrictionConfigDto"}]}},"required":["name"]},"CustomerSummary":{"type":"object","properties":{}},"GetIpRestrictionsResponseDto":{"type":"object","properties":{"ipRestrictions":{"description":"IP restriction configuration","allOf":[{"$ref":"#/components/schemas/IpRestrictionConfigDto"}]}},"required":["ipRestrictions"]},"UpdateAccountIpRestrictionsDto":{"type":"object","properties":{"ipRestrictions":{"description":"IP restriction configuration for the account","allOf":[{"$ref":"#/components/schemas/IpRestrictionConfigDto"}]}},"required":["ipRestrictions"]},"PaginationData":{"type":"object","properties":{"totalCount":{"type":"number"},"pageSize":{"type":"number"},"pageNumber":{"type":"number"}},"required":["totalCount","pageSize","pageNumber"]},"PaginatedApiResponseBase":{"type":"object","properties":{"data":{"type":"object"},"message":{"type":"string"},"pagination":{"$ref":"#/components/schemas/PaginationData"}},"required":["data","pagination"]},"SolanaStakeAccount":{"type":"object","properties":{"customerId":{"type":"number"},"stakePubkey":{"type":"string"},"fromPubkey":{"type":"string"},"stakeAuthority":{"type":"string"},"withdrawAuthority":{"type":"string"},"initialLamports":{"type":"string"},"rentExemptionAmount":{"type":"string"},"lamports":{"type":"string"},"inactiveStake":{"type":"string"},"status":{"type":"string"},"reference":{"type":"string"},"label":{"type":"string"},"creationLastValidBlockHeight":{"type":"number"},"activationEpoch":{"type":"number"},"lastStatusSyncEpoch":{"type":"number"},"performanceTotal":{"type":"string"},"performance30d":{"type":"string"},"performance7d":{"type":"string"},"votePubkey":{"type":"string"}},"required":["customerId","stakePubkey","fromPubkey","stakeAuthority","withdrawAuthority","initialLamports","rentExemptionAmount","lamports","inactiveStake","status","reference","label","creationLastValidBlockHeight","activationEpoch","lastStatusSyncEpoch","performanceTotal","performance30d","performance7d"]},"SolanaTransactionSignature":{"type":"object","properties":{"pubKey":{"type":"string"},"secretKey":{"type":"string","description":"secret key of signer, only present for stake creation where keypair is ephemeral"},"signature":{"type":"string"}},"required":["pubKey","signature"]},"BuildTransactionPayloadResponseDto":{"type":"object","properties":{"serialized":{"type":"string","example":"800200080ac6f91611c...080900040200000000","description":"serialized transaction"},"stakePubkey":{"type":"string","example":"8Htve3nXPsvXk88WrJHH6nQBQCjw4bSCJLuEpT6ArfMY","description":"pubkey of stake account"},"signatures":{"example":[{"pubKey":"6V2Lfg1jvanitWUKWRDLTrWvbHvsMMbRuhQ3CTKY1FAq","signature":"2bfb03d5ce6263ba0f...7a24b6d00c4682c04"}],"description":"additional signatures to apply to transaction before submitting","type":"array","items":{"$ref":"#/components/schemas/SolanaTransactionSignature"}}},"required":["serialized","signatures"]},"StakeInstructionWithInputs":{"type":"object","properties":{"type":{"type":"string"},"input":{"type":"object"}},"required":["type","input"]},"BuildTransactionPayloadRequestDto":{"type":"object","properties":{"feePayer":{"type":"string","example":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8"},"stakePubkey":{"type":"string","example":"8Htve3nXPsvXk88WrJHH6nQBQCjw4bSCJLuEpT6ArfMY","description":"target stake account to which this operation relates"},"instructions":{"example":[{"type":"createAndDelegate","input":{"fromPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","stakeAuthority":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","withdrawAuthority":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","reference":"Fund 1","label":"SOL stake 1","lamports":1000000000}},{"type":"create","input":{"fromPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","stakeAuthority":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","withdrawAuthority":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","reference":"Fund 1","label":"SOL stake 1","lamports":1000000000}},{"type":"delegate","input":{"authorizedPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8"}},{"type":"undelegate","input":{"authorizedPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8"}},{"type":"withdraw","input":{"authorizedPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","toPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","lamports":1000000000}},{"type":"merge","input":{"authorizedPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","sourceStakePubkey":"2niBr5ra1jswrGRkxVG42GC63fTQ7TtE6uTiNeuJTu67"}},{"type":"authorize","input":{"authorizedPubkey":"ADGZiJfmQMAYRNKGUL9phNaJaZYtFTK7xjJ2yjV3yQV8","newAuthorizedPubkey":"ehxMpdUdAS63ceRCWqTGnMVHpdkjzaEsXDq1e5usoni","stakeAuthorizationType":1}}],"type":"array","items":{"$ref":"#/components/schemas/StakeInstructionWithInputs"}}},"required":["feePayer","instructions"]},"SolanaStakingPerformanceSummary":{"type":"object","properties":{"inflationRewardsTotal":{"type":"string"},"inflationRewards7d":{"type":"string"},"inflationRewards30d":{"type":"string"},"mevRewardsTotal":{"type":"string"},"mevRewards7d":{"type":"string"},"mevRewards30d":{"type":"string"}},"required":["inflationRewardsTotal","inflationRewards7d","inflationRewards30d","mevRewardsTotal","mevRewards7d","mevRewards30d"]},"SolanaStakeAccountRewards":{"type":"object","properties":{"stakePubkey":{"type":"string"},"dayStart":{"type":"number"},"epoch":{"type":"number"},"inflationRewardAmount":{"type":"string"},"effectiveSlot":{"type":"number"},"postBalance":{"type":"string"},"mevRewardAmount":{"type":"string"},"solPrice":{"type":"number"}},"required":["stakePubkey","dayStart","epoch","inflationRewardAmount","effectiveSlot","postBalance","mevRewardAmount","solPrice"]},"SolanaStakingRewardsChartData":{"type":"object","properties":{"inflationRewards":{"type":"string"},"mevRewards":{"type":"string"},"periodStart":{"type":"number"},"periodEnd":{"type":"number"},"price":{"type":"number"}},"required":["inflationRewards","mevRewards","periodStart","periodEnd","price"]},"SolanaStakingNetworkInfo":{"type":"object","properties":{"currentEpoch":{"type":"number"},"avgInflationRewardRate":{"type":"number"},"slotIndex":{"type":"number"},"slotsInEpoch":{"type":"number"}},"required":["currentEpoch","avgInflationRewardRate","slotIndex","slotsInEpoch"]},"StakeDetails":{"type":"object","properties":{"stakeId":{"type":"number"},"customerId":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"reference":{"type":"string"},"region":{"type":"string","enum":["US","AU"]},"label":{"type":"string"},"withdrawalAddress":{"type":"string"},"suggestedFeeRecipient":{"type":"string"},"validatorStartIndex":{"type":"number"},"validatorCount":{"type":"number"},"status":{"type":"string"},"message":{"type":"string"},"history":{"description":"Stake history entries","type":"array","items":{"type":"object"}}},"required":["stakeId","customerId","reference","label","withdrawalAddress","suggestedFeeRecipient","validatorStartIndex","validatorCount","status","message"]},"CreateStakeResponse":{"type":"object","properties":{"stake":{"$ref":"#/components/schemas/StakeDetails"}},"required":["stake"]},"CreateStakeDto":{"type":"object","properties":{"withdrawalAddress":{"type":"string","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","description":"nominated withdrawal address"},"suggestedFeeRecipient":{"type":"string","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","description":"nominated fee recipient address"},"validatorCount":{"type":"number","example":2},"reference":{"type":"string","example":"customer-id-1403","description":"an arbitrary reference used to identify/group the stake"},"label":{"type":"string","example":"Stake for 2 vallies","description":"an arbitrary label/memo"},"region":{"type":"string","example":"AU","description":"region","enum":["US","AU"]}},"required":["withdrawalAddress","suggestedFeeRecipient","validatorCount","reference"]},"ValidatorDeposit":{"type":"object","properties":{"amount":{"type":"number"},"slot":{"type":"number"},"status":{"type":"string","enum":["QUEUED","PROCESSED"]}},"required":["amount","slot","status"]},"ValidatorWithdrawal":{"type":"object","properties":{"amount":{"type":"number"},"withdrawableEpoch":{"type":"number"},"status":{"type":"string","enum":["QUEUED","PROCESSED"]}},"required":["amount","withdrawableEpoch","status"]},"ValidatorConsolidation":{"type":"object","properties":{"amount":{"type":"number"},"targetPubkey":{"type":"string"},"sourcePubkey":{"type":"string"},"status":{"type":"string","enum":["QUEUED","PROCESSED"]}},"required":["amount","targetPubkey","sourcePubkey","status"]},"PendingIncoming":{"type":"object","properties":{"activeCount":{"type":"number","description":"Number of active consolidations targeting this validator"},"totalIncomingGwei":{"type":"string","description":"Total incoming amount in Gwei from pending consolidations"}},"required":["activeCount","totalIncomingGwei"]},"Validator":{"type":"object","properties":{"pubkey":{"type":"string"},"withdrawal_credentials":{"type":"string"},"amount":{"type":"number"},"signature":{"type":"string"},"deposit_message_root":{"type":"string"},"region":{"type":"string","enum":["US","AU"]},"deposit_data_root":{"type":"string"},"fork_version":{"type":"string"},"network_name":{"type":"string"},"deposit_cli_version":{"type":"string"},"status":{"type":"string"},"suggestedFeeRecipient":{"type":"string"},"validatorIndex":{"type":"number"},"statusLastChecked":{"type":"string"},"balanceGwei":{"type":"string"},"effectiveBalanceGwei":{"type":"string"},"stakeOid":{"type":"string","description":"Stake Object ID from database"},"stakeId":{"type":"number","description":"Stake ID"},"withdrawalAddress":{"type":"string","description":"Withdrawal address for the validator"},"deposits":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorDeposit"}},"withdrawals":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorWithdrawal"}},"consolidations":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConsolidation"}},"activationEpoch":{"type":"number","description":"Epoch when validator became active"},"activationEligibilityEpoch":{"type":"number","description":"Epoch when sum of validator deposits reached the minimum activation balance"},"exitEpoch":{"type":"number","description":"Epoch when validator was exited"},"withdrawableEpoch":{"type":"number","description":"Epoch when validator balance became withdrawable after exit"},"pendingIncoming":{"description":"Pending incoming consolidation amounts for this validator","allOf":[{"$ref":"#/components/schemas/PendingIncoming"}]}},"required":["pubkey","withdrawal_credentials","amount","signature","deposit_message_root","deposit_data_root","fork_version","network_name","deposit_cli_version","status","suggestedFeeRecipient","validatorIndex","statusLastChecked","balanceGwei","effectiveBalanceGwei"]},"StakeDetailsWithValidators":{"type":"object","properties":{"stakeId":{"type":"number"},"customerId":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"reference":{"type":"string"},"region":{"type":"string","enum":["US","AU"]},"label":{"type":"string"},"withdrawalAddress":{"type":"string"},"suggestedFeeRecipient":{"type":"string"},"validatorStartIndex":{"type":"number"},"validatorCount":{"type":"number"},"status":{"type":"string"},"message":{"type":"string"},"history":{"description":"Stake history entries","type":"array","items":{"type":"object"}},"validators":{"type":"array","items":{"$ref":"#/components/schemas/Validator"}}},"required":["stakeId","customerId","reference","label","withdrawalAddress","suggestedFeeRecipient","validatorStartIndex","validatorCount","status","message","validators"]},"SimulationLog":{"type":"object","properties":{"name":{"type":"string","description":"Event name (if decoded)","example":""},"address":{"type":"string","description":"Contract address that emitted the log","example":"0x00000000219ab540356cbb839cbe05303d7705fa"},"data":{"type":"string","description":"Raw log data","example":"0x00000000000000000000000000000000000000000000000000000000000000a0..."},"topics":{"description":"Event topic hashes","example":["0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5"],"type":"array","items":{"type":"string"}}},"required":["name","address","data","topics"]},"SimulationStateDiffRaw":{"type":"object","properties":{"address":{"type":"string","description":"Contract address","example":"0x00000000219ab540356cbb839cbe05303d7705fa"},"key":{"type":"string","description":"Storage slot key","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"original":{"type":"string","description":"Original value at storage slot","example":"0x5e0221fc22d93c98e0c1ba43cad66f8ed0c423b355f548ecaecb8b9ac1e87000"},"dirty":{"type":"string","description":"New value at storage slot","example":"0x2103b2b3bed9441170c8483184139f999e1e3feef8d17840ac3082a394718f7e"}},"required":["address","key","original","dirty"]},"SimulationStateDiff":{"type":"object","properties":{"address":{"type":"string","description":"Contract address with state changes","example":"0x00000000219ab540356cbb839cbe05303d7705fa"},"soltype":{"type":"object","description":"Solidity type information (if available)","example":null},"original":{"type":"object","description":"Original value (if available)","example":null},"dirty":{"type":"object","description":"Dirty value (if available)","example":null},"raw":{"description":"Raw state diff entries","type":"array","items":{"$ref":"#/components/schemas/SimulationStateDiffRaw"}}},"required":["address","raw"]},"SimulationBalanceDiff":{"type":"object","properties":{"address":{"type":"string","description":"Address with balance change","example":"0x0000000000000000000000000000000000000000"},"original":{"type":"string","description":"Original balance before transaction","example":"340759134036041748877"},"dirty":{"type":"string","description":"Balance after transaction","example":"339759057341860188039"},"is_miner":{"type":"boolean","description":"Whether this address is the miner/validator","example":false}},"required":["address","original","dirty","is_miner"]},"AssetTokenInfo":{"type":"object","properties":{"standard":{"type":"string","description":"Token standard (e.g., NativeCurrency, ERC20, ERC721)","example":"NativeCurrency"},"type":{"type":"string","description":"Token type (Fungible, NonFungible)","example":"Fungible"},"contract_address":{"type":"string","description":"Token contract address (0x0 for native currency)","example":"0x0000000000000000000000000000000000000000"},"symbol":{"type":"string","description":"Token symbol","example":"ETH"},"name":{"type":"string","description":"Token name","example":"Ether"},"logo":{"type":"string","description":"Token logo URL","example":"https://coin-images.coingecko.com/coins/images/279/large/ethereum.png?1696501628"},"decimals":{"type":"number","description":"Token decimals","example":18},"dollar_value":{"type":"string","description":"Dollar value of the token","example":"0"}},"required":["standard","type","contract_address","symbol","name","decimals"]},"SimulationAssetChange":{"type":"object","properties":{"token_info":{"description":"Token information","allOf":[{"$ref":"#/components/schemas/AssetTokenInfo"}]},"type":{"type":"string","description":"Type of asset change","example":"Transfer"},"from":{"type":"string","description":"Source address","example":"0x0000000000000000000000000000000000000000"},"to":{"type":"string","description":"Destination address","example":"0x00000000219ab540356cbb839cbe05303d7705fa"},"amount":{"type":"string","description":"Human-readable amount","example":"1"},"raw_amount":{"type":"string","description":"Raw amount in smallest unit (wei, etc.)","example":"1000000000000000000"},"dollar_value":{"type":"string","description":"Dollar value of the transfer","example":"0"},"from_before_balance":{"type":"string","description":"Balance before transfer (from address)","example":"0x1278fba2fc8bfd518d"},"to_before_balance":{"type":"string","description":"Balance before transfer (to address)","example":"0x829b4ec2eed78acb84200"}},"required":["token_info","type","from","to","amount","raw_amount"]},"SimulationData":{"type":"object","properties":{"simulationId":{"type":"string","description":"Simulation ID (if provided by the simulation service)","example":"7e8936af-485d-4aff-b487-6564830128ba"},"success":{"type":"boolean","description":"Whether the simulation was successful","example":true},"executionCost":{"type":"number","description":"Transaction execution cost (gas in EVM, compute units in Solana, etc.)","example":150000},"costPerUnit":{"type":"string","description":"Cost per unit (gas price, fee, etc.)","example":"20000000000"},"totalCost":{"type":"string","description":"Total cost of the transaction","example":"3000000000000000"},"logs":{"description":"Transaction logs/events from the simulation","example":[{"name":"","address":"0x00000000219ab540356cbb839cbe05303d7705fa","data":"0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030a20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000506965722054776f000000000000000000000000000000000000000000000000000000000000000800ca9a3b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506965722054776f0000000000000000000000000000000000000000000000000000000000000008e61a030000000000000000000000000000000000000000000000000000000000","topics":["0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5"]}],"type":"array","items":{"$ref":"#/components/schemas/SimulationLog"}},"stateDiff":{"description":"State changes from the simulation","example":[{"address":"0x00000000219ab540356cbb839cbe05303d7705fa","soltype":null,"original":null,"dirty":null,"raw":[{"address":"0x00000000219ab540356cbb839cbe05303d7705fa","key":"0x0000000000000000000000000000000000000000000000000000000000000000","original":"0x5e0221fc22d93c98e0c1ba43cad66f8ed0c423b355f548ecaecb8b9ac1e87000","dirty":"0x2103b2b3bed9441170c8483184139f999e1e3feef8d17840ac3082a394718f7e"},{"address":"0x00000000219ab540356cbb839cbe05303d7705fa","key":"0x0000000000000000000000000000000000000000000000000000000000000020","original":"0x0000000000000000000000000000000000000000000000000000000000031ae6","dirty":"0x0000000000000000000000000000000000000000000000000000000000031ae7"}]}],"type":"array","items":{"$ref":"#/components/schemas/SimulationStateDiff"}},"balanceDiff":{"description":"Balance differences from the simulation","example":[{"address":"0x0000000000000000000000000000000000000000","original":"340759134036041748877","dirty":"339759057341860188039","is_miner":false},{"address":"0x00000000219ab540356cBB839Cbe05303d7705Fa","original":"9868361015449101000000000","dirty":"9868362015449101000000000","is_miner":false}],"type":"array","items":{"$ref":"#/components/schemas/SimulationBalanceDiff"}},"assetChanges":{"description":"Asset changes from the simulation","example":[{"token_info":{"standard":"NativeCurrency","type":"Fungible","contract_address":"0x0000000000000000000000000000000000000000","symbol":"ETH","name":"Ether","logo":"https://coin-images.coingecko.com/coins/images/279/large/ethereum.png?1696501628","decimals":18,"dollar_value":"0"},"type":"Transfer","from":"0x0000000000000000000000000000000000000000","to":"0x00000000219ab540356cbb839cbe05303d7705fa","amount":"1","raw_amount":"1000000000000000000","dollar_value":"0","from_before_balance":"0x1278fba2fc8bfd518d","to_before_balance":"0x829b4ec2eed78acb84200"}],"type":"array","items":{"$ref":"#/components/schemas/SimulationAssetChange"}},"error":{"type":"object","description":"Error information if simulation failed","example":{"errorType":"execution_reverted","errorMessage":"Transaction reverted","revertReason":"Insufficient balance"}},"shareUrl":{"type":"string","description":"Shareable URL for the simulation (if available)","example":"https://simulator.example.com/..."}},"required":["success","executionCost","costPerUnit","totalCost","logs","stateDiff"]},"TransactionAnalysisObservation":{"type":"object","properties":{"source":{"type":"string","description":"Source of the observation (e.g., simulation, validation, custom)","example":"simulation"},"message":{"type":"string","description":"Observation message describing the issue or finding","example":"Transaction simulation succeeded"},"severity":{"type":"string","description":"Severity level of the observation","enum":["info","warn","danger"],"example":"info"}},"required":["source","message","severity"]},"TransactionAnalysis":{"type":"object","properties":{"simulations":{"type":"object","description":"Simulation data from blockchain simulations, keyed by source (e.g., tenderly). The schema for each simulation source follows the SimulationData structure.","additionalProperties":{"$ref":"#/components/schemas/SimulationData"},"example":{"tenderly":{"simulationId":"4e5e1636-f422-49f7-beba-88b274a201a5","success":true,"executionCost":49314,"costPerUnit":"1555221267","totalCost":"76694181560838","logs":[{"name":"","address":"0x00000000219ab540356cbb839cbe05303d7705fa","data":"0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030a20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000506965722054776f000000000000000000000000000000000000000000000000000000000000000800ca9a3b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000506965722054776f0000000000000000000000000000000000000000000000000000000000000008e61a030000000000000000000000000000000000000000000000000000000000","topics":["0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5"]}],"stateDiff":[{"address":"0x00000000219ab540356cbb839cbe05303d7705fa","soltype":null,"original":null,"dirty":null,"raw":[{"address":"0x00000000219ab540356cbb839cbe05303d7705fa","key":"0x0000000000000000000000000000000000000000000000000000000000000000","original":"0x5e0221fc22d93c98e0c1ba43cad66f8ed0c423b355f548ecaecb8b9ac1e87000","dirty":"0x2103b2b3bed9441170c8483184139f999e1e3feef8d17840ac3082a394718f7e"}]}],"balanceDiff":[{"address":"0x0000000000000000000000000000000000000000","original":"340759134036041748877","dirty":"339759057341860188039","is_miner":false},{"address":"0x00000000219ab540356cBB839Cbe05303d7705Fa","original":"9868361015449101000000000","dirty":"9868362015449101000000000","is_miner":false}],"assetChanges":[{"token_info":{"standard":"NativeCurrency","type":"Fungible","contract_address":"0x0000000000000000000000000000000000000000","symbol":"ETH","name":"Ether","logo":"https://coin-images.coingecko.com/coins/images/279/large/ethereum.png?1696501628","decimals":18,"dollar_value":"0"},"type":"Transfer","from":"0x0000000000000000000000000000000000000000","to":"0x00000000219ab540356cbb839cbe05303d7705fa","amount":"1","raw_amount":"1000000000000000000","dollar_value":"0","from_before_balance":"0x1278fba2fc8bfd518d","to_before_balance":"0x829b4ec2eed78acb84200"}],"shareUrl":"https://www.tdly.co/shared/simulation/4e5e1636-f422-49f7-beba-88b274a201a5"}}},"observations":{"description":"Array of observations from various sources","example":[{"source":"validation","message":"All validators found in user records","severity":"info"},{"source":"simulation","message":"Transaction simulation succeeded","severity":"info"}],"type":"array","items":{"$ref":"#/components/schemas/TransactionAnalysisObservation"}}},"required":["observations"]},"EthereumTransactionCraftingWithAnalysisResponse":{"type":"object","properties":{"to":{"type":"string","description":"target contract address","example":"0x0000000000000000000000000000000000000000"},"data":{"type":"string","description":"serialised calldata","example":"0x02f86d59085208943b57d2c0f0db7b7a5e080c0"},"value":{"type":"string","description":"ETH value to send with transaction (in wei)","example":"1000000000000000000"},"nonce":{"type":"number","description":"nonce value, this is based on the provided fromAddress","example":3},"gas":{"type":"string","description":"Gas limit for the transaction","example":"21000"},"chainId":{"type":"number","description":"Ethereum network chainId","example":560048},"maxFeePerGas":{"type":"string","description":"Maximum fee per gas in wei","example":"20000000000"},"maxPriorityFeePerGas":{"type":"string","description":"Maximum priority fee per gas in wei","example":"1000000000"},"serialized":{"type":"string","description":"serialized unsigned transaction made up of other returned fields","example":"0x02f86d01808459682f00825208943b3b57de6e72c0f0db7b7a73b3e3e5e5e5e5e5e588016345785d8a000080c0"},"analysis":{"description":"Transaction analysis including validations and observations","allOf":[{"$ref":"#/components/schemas/TransactionAnalysis"}]}},"required":["to","data","value","nonce","gas","chainId","maxFeePerGas","maxPriorityFeePerGas","serialized","analysis"]},"CreateStakeV2Response":{"type":"object","properties":{"stake":{"$ref":"#/components/schemas/StakeDetailsWithValidators"},"message":{"type":"string","description":"Success message","example":"requested 1 validators successfully"},"transaction":{"description":"Pre-crafted batch deposit transaction. Null if no validators were created.","nullable":true,"allOf":[{"$ref":"#/components/schemas/EthereumTransactionCraftingWithAnalysisResponse"}]}},"required":["stake"]},"CreateStakePectraDto":{"type":"object","properties":{"withdrawalAddress":{"type":"string","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","description":"nominated withdrawal address"},"suggestedFeeRecipient":{"type":"string","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","description":"nominated fee recipient address"},"stakeAmountGwei":{"type":"string","example":"1000000000000","description":"total number of eth to stake"},"maxEthPerValidatorGwei":{"type":"string","example":"100000000000","description":"max ETH to allocate to each validator, will default to 2048 ETH"},"reference":{"type":"string","example":"customer-id-1403","description":"an arbitrary reference used to identify/group the stake"},"label":{"type":"string","example":"Staking 100 ETH","description":"an arbitrary label/memo"},"region":{"type":"string","example":"AU","description":"region","enum":["US","AU"]},"fromAddress":{"type":"string","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","description":"The address to send the transaction from. If not provided, withdrawalAddress will be used."}},"required":["withdrawalAddress","suggestedFeeRecipient","stakeAmountGwei","maxEthPerValidatorGwei","reference"]},"AddTrackedWithdrawalAddressDto":{"type":"object","properties":{"withdrawalAddress":{"type":"string","example":"0x1234567890123456789012345678901234567890","description":"The withdrawal address to track"},"customerId":{"type":"number","example":1,"description":"The customer ID to associate with this withdrawal address"},"label":{"type":"string","example":"External Validators","description":"Label for the tracked address"},"custodian":{"type":"string","example":"BitGo","description":"Custodian name for the tracked address"},"reference":{"type":"string","example":"External Import","description":"Reference for grouping validators"},"isActive":{"type":"boolean","example":true,"description":"Whether tracking is active"}},"required":["withdrawalAddress"]},"TrackedWithdrawalAddressResponseDto":{"type":"object","properties":{"withdrawalAddress":{"type":"string","example":"0x1234567890123456789012345678901234567890","description":"The withdrawal address being tracked"},"customerId":{"type":"number","example":1,"description":"Customer ID associated with this tracked address"},"label":{"type":"string","example":"My External Validators","description":"Label for this tracked address"},"custodian":{"type":"string","example":"BitGo","description":"Custodian name for this address"},"reference":{"type":"string","example":"External Import","description":"Reference for this tracked address"},"isActive":{"type":"boolean","example":true,"description":"Whether this tracked address is active"},"lastSyncedAt":{"format":"date-time","type":"string","example":"2024-01-15T10:30:00.000Z","description":"Last time validators were synced for this address"},"lastSyncError":{"type":"string","example":null,"description":"Error message from last sync attempt if any"},"validatorCount":{"type":"number","example":5,"description":"Number of validators found for this address"},"createdAt":{"format":"date-time","type":"string","example":"2024-01-15T10:30:00.000Z","description":"When this tracked address was created"},"updatedAt":{"format":"date-time","type":"string","example":"2024-01-15T10:30:00.000Z","description":"When this tracked address was last updated"},"stakedWei":{"type":"string","example":"32000000000000000000","description":"Total staked ETH in wei for validators using this withdrawal address (internal + external)"},"idleWei":{"type":"string","example":"1500000000000000000","description":"Idle ETH balance in wei held by this wallet on-chain"},"totalWei":{"type":"string","example":"33500000000000000000","description":"Total ETH in wei (staked + idle)"}},"required":["withdrawalAddress","customerId","isActive","createdAt","updatedAt"]},"CustodiansResponseDto":{"type":"object","properties":{"custodians":{"example":["BitGo","Coinbase","Fireblocks"],"description":"List of unique custodian names from tracked withdrawal addresses","type":"array","items":{"type":"string"}}},"required":["custodians"]},"DeleteTrackedAddressResultDto":{"type":"object","properties":{"deleted":{"type":"boolean","example":true,"description":"Whether the address was successfully deleted/deactivated"},"withdrawalAddress":{"type":"string","example":"0x1234567890123456789012345678901234567890","description":"The withdrawal address that was processed"}},"required":["deleted","withdrawalAddress"]},"DeleteTrackedWithdrawalAddressesDto":{"type":"object","properties":{"addresses":{"description":"Withdrawal addresses to remove from tracking","example":["0x1234567890123456789012345678901234567890","0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"],"type":"array","items":{"type":"string"}}},"required":["addresses"]},"UntrackedKnownAddressDto":{"type":"object","properties":{"address":{"type":"string","example":"0x1234567890123456789012345678901234567890","description":"The wallet address"},"description":{"type":"string","example":"withdrawal address","description":"Description of how this address is known (e.g., withdrawal address, fee recipient)"},"stakedWei":{"type":"string","example":"32000000000000000000","description":"Total staked ETH in wei for validators using this address"},"idleWei":{"type":"string","example":"1500000000000000000","description":"Idle ETH balance in wei in this wallet"}},"required":["address","description","stakedWei","idleWei"]},"DataWithMessage":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]},"ValidatorDepositJson":{"type":"object","properties":{"pubkey":{"type":"string"},"withdrawal_credentials":{"type":"string"},"amount":{"type":"number"},"signature":{"type":"string"},"deposit_message_root":{"type":"string"},"deposit_data_root":{"type":"string"},"fork_version":{"type":"string"},"network_name":{"type":"string"},"deposit_cli_version":{"type":"string"}},"required":["pubkey","withdrawal_credentials","amount","signature","deposit_message_root","deposit_data_root","fork_version","network_name","deposit_cli_version"]},"ValidatorStatusCounts":{"type":"object","properties":{"ACTIVE":{"type":"number"},"ACTIVE_EXITING":{"type":"number"},"EXITED":{"type":"number"},"PENDING_ACTIVATION":{"type":"number"},"WAITING_DEPOSIT":{"type":"number"},"WAITING_PREGEN":{"type":"number"},"WAITING_REQUEST":{"type":"number"},"WAITING_KEYGEN":{"type":"number"},"WAITING_VC_DEPLOYMENT":{"type":"number"},"ABANDONED":{"type":"number"}},"required":["ACTIVE","ACTIVE_EXITING","EXITED","PENDING_ACTIVATION","WAITING_DEPOSIT","WAITING_PREGEN","WAITING_REQUEST","WAITING_KEYGEN","WAITING_VC_DEPLOYMENT","ABANDONED"]},"StakeWithValidatorStatusCounts":{"type":"object","properties":{"stakeId":{"type":"number"},"reference":{"type":"string"},"validatorStatusCounts":{"$ref":"#/components/schemas/ValidatorStatusCounts"},"region":{"type":"string","enum":["US","AU"]}},"required":["stakeId","reference","validatorStatusCounts"]},"ValidatorWithStakeDetails":{"type":"object","properties":{"pubkey":{"type":"string"},"withdrawal_credentials":{"type":"string"},"amount":{"type":"number"},"signature":{"type":"string"},"deposit_message_root":{"type":"string"},"region":{"type":"string","enum":["US","AU"]},"deposit_data_root":{"type":"string"},"fork_version":{"type":"string"},"network_name":{"type":"string"},"deposit_cli_version":{"type":"string"},"status":{"type":"string"},"suggestedFeeRecipient":{"type":"string"},"validatorIndex":{"type":"number"},"statusLastChecked":{"type":"string"},"balanceGwei":{"type":"string"},"effectiveBalanceGwei":{"type":"string"},"stakeOid":{"type":"string","description":"Stake Object ID from database"},"stakeId":{"type":"number","description":"Stake ID"},"withdrawalAddress":{"type":"string","description":"Withdrawal address for the validator"},"deposits":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorDeposit"}},"withdrawals":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorWithdrawal"}},"consolidations":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConsolidation"}},"activationEpoch":{"type":"number","description":"Epoch when validator became active"},"activationEligibilityEpoch":{"type":"number","description":"Epoch when sum of validator deposits reached the minimum activation balance"},"exitEpoch":{"type":"number","description":"Epoch when validator was exited"},"withdrawableEpoch":{"type":"number","description":"Epoch when validator balance became withdrawable after exit"},"pendingIncoming":{"description":"Pending incoming consolidation amounts for this validator","allOf":[{"$ref":"#/components/schemas/PendingIncoming"}]},"reference":{"type":"string"},"label":{"type":"string"}},"required":["pubkey","withdrawal_credentials","amount","signature","deposit_message_root","deposit_data_root","fork_version","network_name","deposit_cli_version","status","suggestedFeeRecipient","validatorIndex","statusLastChecked","balanceGwei","effectiveBalanceGwei","reference","label"]},"Message":{"type":"object","properties":{"epoch":{"type":"string"},"validator_index":{"type":"string"}},"required":["epoch","validator_index"]},"ValidatorExitMessage":{"type":"object","properties":{"message":{"$ref":"#/components/schemas/Message"},"signature":{"type":"string"}},"required":["message","signature"]},"ValidatorExitMessageResp":{"type":"object","properties":{"pubkey":{"type":"string"},"exitMessage":{"$ref":"#/components/schemas/ValidatorExitMessage"}},"required":["pubkey","exitMessage"]},"GenPresignedExitMsgDto":{"type":"object","properties":{"pubkeys":{"example":"[\"a20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03\"]","type":"array","items":{"type":"string"}}},"required":["pubkeys"]},"BeaconNodeVoluntaryExitResponse":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"}},"required":["code","message"]},"BulkWithdrawError":{"type":"object","properties":{"pubkey":{"type":"string"},"message":{"type":"string"}},"required":["pubkey","message"]},"EstimatedWithdrawalTimes":{"type":"object","properties":{"validatorIndex":{"type":"number"},"validation":{"type":"string"},"expectedExitEpoch":{"type":"number"},"expectedFullWithdrawalEligibilityEpoch":{"type":"number"},"predictedWithdrawalEpoch":{"type":"number"},"predictedExitSubmissionDeadlineEpoch":{"type":"number"}},"required":["validatorIndex","validation","expectedExitEpoch","expectedFullWithdrawalEligibilityEpoch","predictedWithdrawalEpoch","predictedExitSubmissionDeadlineEpoch"]},"EstimateWithdrawalTimesDto":{"type":"object","properties":{"validatorIndexes":{"example":[1142356],"type":"array","items":{"type":"number"}}},"required":["validatorIndexes"]},"GenerateDepositDataDto":{"type":"object","properties":{"deposits":{"example":[{"pubkey":"a20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03","amountGwei":"1000000000"}],"type":"array","items":{"$ref":"#/components/schemas/ValidatorDeposit"}},"credentialsType":{"type":"string","example":"0x02","description":"Withdrawal credentials type (leave empty or pass `0x01` for Shapella, `0x02` for Pectra)","enum":["0x01","0x02"]}},"required":["deposits"]},"EthereumValidatorTopupDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"validatorPubkey":{"type":"string","description":"Validator public key to top up","example":"0xa20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03"},"amountWei":{"type":"string","description":"Amount of ETH to deposit in wei","example":"1000000000000000000"}},"required":["fromAddress","gasEstimateMultiplier","validatorPubkey","amountWei"]},"EthereumValidatorTopupBaseDto":{"type":"object","properties":{"validatorPubkey":{"type":"string","description":"Validator public key to top up","example":"0xa20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03"},"amountWei":{"type":"string","description":"Amount of ETH to deposit in wei","example":"1000000000000000000"}},"required":["validatorPubkey","amountWei"]},"EthereumValidatorBatchTopupDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"deposits":{"description":"Array of validator deposit details","example":[{"validatorPubkey":"0xa20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03","amountWei":"1000000000000000000"}],"type":"array","items":{"$ref":"#/components/schemas/EthereumValidatorTopupBaseDto"}}},"required":["fromAddress","gasEstimateMultiplier","deposits"]},"EthereumValidatorDepositDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"validatorPubkey":{"type":"string","description":"Validator public key to top up","example":"0xa20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03"},"amountWei":{"type":"string","description":"Amount of ETH to deposit in wei","example":"1000000000000000000"},"signature":{"type":"string","description":"Deposit signature (signed by validator key)","example":"8473169ba6...fdfb36571"},"withdrawalCredentials":{"type":"string","description":"Withdrawal credentials","example":"0x020000000000000000000000110af92ba116fd7868216aa794a7e4da3b9d7d11"}},"required":["fromAddress","gasEstimateMultiplier","validatorPubkey","amountWei","signature","withdrawalCredentials"]},"EthereumValidatorDepositBaseDto":{"type":"object","properties":{"validatorPubkey":{"type":"string","description":"Validator public key to deposit into","example":"0xa20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03"},"amountWei":{"type":"string","description":"Amount of ETH to deposit in wei","example":"1000000000000000000"},"signature":{"type":"string","description":"Deposit signature (signed by validator key)","example":"8473169ba6...fdfb36571"},"withdrawalCredentials":{"type":"string","description":"Withdrawal credentials","example":"0x020000000000000000000000110af92ba116fd7868216aa794a7e4da3b9d7d11"}},"required":["validatorPubkey","amountWei","signature","withdrawalCredentials"]},"EthereumValidatorBatchDepositDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"deposits":{"description":"Array of validator deposit details","example":[{"validatorPubkey":"0xa20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03","amountWei":"1000000000000000000","signature":"8473169ba6...fdfb36571","withdrawalCredentials":"0x020000000000000000000000110af92ba116fd7868216aa794a7e4da3b9d7d11"}],"type":"array","items":{"$ref":"#/components/schemas/EthereumValidatorDepositBaseDto"}}},"required":["fromAddress","gasEstimateMultiplier","deposits"]},"EthereumValidatorWithdrawDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"validatorPubkey":{"type":"string","description":"Validator public key to withdraw from","example":"a20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03"},"amountGwei":{"type":"string","description":"Amount of ETH to withdraw in gwei","example":"1000000000"}},"required":["fromAddress","gasEstimateMultiplier","validatorPubkey","amountGwei"]},"EthereumValidatorConsolidateDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"sourceValidatorPubkey":{"type":"string","description":"Source validator public key (will be consolidated from)","example":"a20d2ba70419cb3922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb03"},"targetValidatorPubkey":{"type":"string","description":"Target validator public key (will be consolidated to)","example":"b31f3ba80429db4922985488e339736ab32e6184f11708d2333f65b14f70cf47365b538c32eff237cdaf293ea2bcfb04"}},"required":["fromAddress","gasEstimateMultiplier","sourceValidatorPubkey","targetValidatorPubkey"]},"QueueStats":{"type":"object","properties":{"entryWaitingTime":{"type":"string","example":"2 days"},"entryWaitingTimeSeconds":{"type":"number"},"exitWaitingTime":{"type":"string","example":"34 minutes"},"exitWaitingTimeSeconds":{"type":"number"},"avgApr7d":{"type":"number"},"avgApr31d":{"type":"number"},"apr":{"type":"number"},"activeValidators":{"type":"number"},"exitingValidators":{"type":"number"},"enteringValidators":{"type":"number"},"exitingBalanceGwei":{"type":"string"},"enteringBalanceGwei":{"type":"string"}},"required":["entryWaitingTime","entryWaitingTimeSeconds","exitWaitingTime","exitWaitingTimeSeconds","avgApr7d","avgApr31d","apr","activeValidators","exitingValidators","enteringValidators","exitingBalanceGwei","enteringBalanceGwei"]},"ValidatorInfo":{"type":"object","properties":{"pubKey":{"type":"string"},"index":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"depositTime":{"type":"number"}},"required":["pubKey","index","name","status","depositTime"]},"ValidatorDailyRewardDto":{"type":"object","properties":{"index":{"type":"number"},"dayStart":{"type":"number"},"consensusRewards":{"type":"string"},"executionRewards":{"type":"string"},"ethPrice":{"type":"number"},"consensusStartEpoch":{"type":"number","description":"The start epoch of the consensus rewards. Only available for v2"},"consensusEndEpoch":{"type":"number","description":"The end epoch of the consensus rewards. Only available for v2"},"consensusEpochsObserved":{"type":"number","description":"The number of epochs of consensus rewardsobserved for the day. Only available for v2"},"executionStartEpoch":{"type":"number","description":"The first epoch in the day where an execution reward was earned. Only available for v2"},"executionEndEpoch":{"type":"number","description":"The last epoch in the day where an execution reward was earned. Only available for v2"},"executionBlocksWon":{"type":"number","description":"The number of blocks won for the day. Only available for v2"}},"required":["index","dayStart","consensusRewards","executionRewards","ethPrice"]},"ValidatorPerformance":{"type":"object","properties":{"index":{"type":"number"},"el1H":{"type":"string"},"cl1H":{"type":"string"},"el1D":{"type":"string"},"cl1D":{"type":"string"},"el7D":{"type":"string"},"cl7D":{"type":"string"},"el31D":{"type":"string"},"cl31D":{"type":"string"},"el1Y":{"type":"string"},"cl1Y":{"type":"string"},"elTotal":{"type":"string"},"clTotal":{"type":"string"}},"required":["index","el1H","cl1H","el1D","cl1D","el7D","cl7D","el31D","cl31D","el1Y","cl1Y","elTotal","clTotal"]},"ValidatorDailyPerformanceStat":{"type":"object","properties":{"consensusRewards":{"type":"string"},"executionRewards":{"type":"string"},"periodStart":{"type":"number"},"periodEnd":{"type":"number"},"price":{"type":"number"}},"required":["consensusRewards","executionRewards","periodStart","periodEnd","price"]},"CustomerDashboardSummary":{"type":"object","properties":{"totalValidators":{"type":"number"},"totalStakes":{"type":"number"},"performanceTotal":{"type":"string"},"numAccounts":{"type":"number"},"validatorStatusCounts":{"$ref":"#/components/schemas/ValidatorStatusCounts"}},"required":["totalValidators","totalStakes","performanceTotal","numAccounts","validatorStatusCounts"]},"CustomerDashboardAccount":{"type":"object","properties":{"totalValidators":{"type":"number"},"totalStakes":{"type":"number"},"performanceTotal":{"type":"string"},"name":{"type":"string"},"performance7D":{"type":"string"},"validatorStatusCounts":{"$ref":"#/components/schemas/ValidatorStatusCounts"}},"required":["totalValidators","totalStakes","performanceTotal","name","performance7D","validatorStatusCounts"]},"CustomerDashboard":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/CustomerDashboardSummary"},"accounts":{"type":"array","items":{"$ref":"#/components/schemas/CustomerDashboardAccount"}}},"required":["summary","accounts"]},"StakedBreakdown":{"type":"object","properties":{"totalWei":{"type":"string","example":"6000000000000000000","description":"Total staked ETH in wei (PierTwo + External)"},"pierTwoWei":{"type":"string","example":"4000000000000000000","description":"PierTwo staked ETH in wei"},"externalWei":{"type":"string","example":"2000000000000000000","description":"External staked ETH in wei"}},"required":["totalWei","pierTwoWei","externalWei"]},"WalletsDashboardSummary":{"type":"object","properties":{"totalCustodians":{"type":"number","example":4,"description":"Total number of wallet custodians"},"totalAddresses":{"type":"number","example":22,"description":"Total number of addresses"},"staked":{"description":"Global staked breakdown","allOf":[{"$ref":"#/components/schemas/StakedBreakdown"}]},"idleWei":{"type":"string","example":"2123000000000000000000","description":"Total idle ETH in wei"}},"required":["totalCustodians","totalAddresses","staked","idleWei"]},"WalletCustodian":{"type":"object","properties":{"custodian":{"type":"string","example":"BitGo","description":"Wallet custodian name"},"percentage":{"type":"number","example":30,"description":"Percentage of total value"},"addressCount":{"type":"number","example":7,"description":"Number of addresses for this custodian"},"totalWei":{"type":"string","example":"1234000000000000000000","description":"Total ETH value in wei"},"staked":{"description":"Staked ETH breakdown","allOf":[{"$ref":"#/components/schemas/StakedBreakdown"}]},"idleWei":{"type":"string","example":"734000000000000000000","description":"Idle ETH in wei"}},"required":["custodian","percentage","addressCount","totalWei","staked","idleWei"]},"ValidatorApr":{"type":"object","properties":{"validatorIndex":{"type":"number","description":"Validator index","example":12345},"apr":{"type":"number","description":"Total APR percentage for this validator (consensus + execution)","example":2.5},"consensusApr":{"type":"number","description":"Consensus layer APR percentage (attestations, sync committees)","example":1.8},"executionApr":{"type":"number","description":"Execution layer APR percentage (block proposals, MEV)","example":0.7}},"required":["validatorIndex","apr","consensusApr","executionApr"]},"ValidatorGroupApr":{"type":"object","properties":{"apr":{"type":"number","description":"Overall APR percentage for the validator group","example":2.5},"validators":{"description":"Individual validator APRs for this day","type":"array","items":{"$ref":"#/components/schemas/ValidatorApr"}}},"required":["apr","validators"]},"AprDataPoint":{"type":"object","properties":{"timestamp":{"type":"number","description":"Timestamp for this data point (Unix timestamp in seconds)","example":1694736000},"pierTwo":{"description":"APR data for PierTwo validators","allOf":[{"$ref":"#/components/schemas/ValidatorGroupApr"}]},"external":{"description":"APR data for External validators","allOf":[{"$ref":"#/components/schemas/ValidatorGroupApr"}]},"cesr":{"type":"number","description":"CESR APR as decimal (network benchmark, e.g. 0.028 = 2.8%)","example":0.022}},"required":["timestamp","pierTwo","external","cesr"]},"AprComparisonResponse":{"type":"object","properties":{"dataPoints":{"description":"Array of APR data points over time. Each point represents a complete day of data.","type":"array","items":{"$ref":"#/components/schemas/AprDataPoint"}},"timeRange":{"type":"string","description":"Time range used for the data","example":"1Y","enum":["1Y","1M","1W"]},"periodStart":{"type":"number","description":"Start of the data period (Unix timestamp in seconds, midnight UTC)","example":1694736000},"periodEnd":{"type":"number","description":"End of the data period (Unix timestamp in seconds, midnight UTC of last complete day)","example":1695340800},"excludesToday":{"type":"boolean","description":"Whether the current (today) day is excluded from the data. Always true since today has incomplete income data.","example":true}},"required":["dataPoints","timeRange","periodStart","periodEnd","excludesToday"]},"WalletsDashboard":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/WalletsDashboardSummary"},"custodians":{"type":"array","items":{"$ref":"#/components/schemas/WalletCustodian"}}},"required":["summary","custodians"]},"CustomerAccountStake":{"type":"object","properties":{"stakeId":{"type":"number"},"name":{"type":"string"},"withdrawalAddress":{"type":"string"},"totalValidators":{"type":"number"},"performanceTotal":{"type":"string"},"performance7D":{"type":"string"},"validatorStatusCounts":{"$ref":"#/components/schemas/ValidatorStatusCounts"}},"required":["stakeId","name","withdrawalAddress","totalValidators","performanceTotal","performance7D","validatorStatusCounts"]},"CustomerAccount":{"type":"object","properties":{"name":{"type":"string"},"performanceTotal":{"type":"string"},"performance7D":{"type":"string"},"totalValidators":{"type":"number"},"validatorStatusCounts":{"$ref":"#/components/schemas/ValidatorStatusCounts"},"stakes":{"type":"array","items":{"$ref":"#/components/schemas/CustomerAccountStake"}}},"required":["name","performanceTotal","performance7D","totalValidators","validatorStatusCounts","stakes"]},"ValidatorIncomeHistory":{"type":"object","properties":{"timestampStart":{"format":"date-time","type":"string"},"timestampEnd":{"format":"date-time","type":"string"},"totalIncomeWei":{"type":"string"}},"required":["timestampStart","timestampEnd","totalIncomeWei"]},"BeaconChainValidatorDto":{"type":"object","properties":{"activationeligibilityepoch":{"type":"number","description":"Epoch when validator became eligible for activation","example":0},"activationepoch":{"type":"number","description":"Epoch when validator was activated","example":0},"balance":{"type":"number","description":"Current balance in Gwei","example":32465446692},"effectivebalance":{"type":"number","description":"Effective balance in Gwei (used for rewards calculation)","example":32000000000},"exitepoch":{"type":"number","description":"Epoch when validator will exit (max value if not exiting)","example":9223372036854776000},"lastattestationslot":{"type":"number","description":"Last slot where validator attested","example":1920547},"name":{"type":"string","description":"Validator name/label","example":"nimbus"},"pubkey":{"type":"string","description":"Validator public key","example":"0x80000924ccc68dd017bb3d2dc85c6d3c87a28d140907f546467bb4528b0441357e7704ebebcac9e4876e5b7bb3a96c4a"},"slashed":{"type":"boolean","description":"Whether validator has been slashed","example":false},"status":{"type":"string","description":"Current validator status","example":"active_online","enum":["pending","active_online","active_ongoing","active_offline","slashing_online","slashing_offline","slashed","exiting_online","exiting_offline","exited","deposited"]},"validatorindex":{"type":"number","description":"Validator index on the beacon chain","example":490443},"withdrawableepoch":{"type":"number","description":"Epoch when validator balance becomes withdrawable","example":9223372036854776000},"withdrawalcredentials":{"type":"string","description":"Withdrawal credentials","example":"0x0044557f80ee2e70f48c3466c281bf6cd01add9a0a2e5f8936c4cf4292c1dbc0"},"total_withdrawals":{"type":"number","description":"Total number of withdrawals","example":0}},"required":["activationeligibilityepoch","activationepoch","balance","effectivebalance","exitepoch","lastattestationslot","name","pubkey","slashed","status","validatorindex","withdrawableepoch","withdrawalcredentials","total_withdrawals"]},"AddExternalValidatorForCustomerDto":{"type":"object","properties":{"pubkey":{"type":"string","example":"0xb8a5206982b6544a31e4574415bff1da9d849f64a7782cdc0c6bc31c2575c90a24712867e7987f76df1c2c33b6cda615"},"reference":{"type":"string","example":"Imported Validators"},"label":{"type":"string","example":"Validator 1035298"},"status":{"type":"string","example":"ACTIVE"},"withdrawalAddress":{"type":"string","example":"0x0000000000000000000000000000000000000000"},"suggestedFeeRecipient":{"type":"string","example":"0x0000000000000000000000000000000000000000"},"balanceGwei":{"type":"string","example":"0"},"effectiveBalanceGwei":{"type":"string","example":"0"},"validatorIndex":{"type":"string","example":1}},"required":["pubkey","reference","label","status","withdrawalAddress","suggestedFeeRecipient","balanceGwei","effectiveBalanceGwei","validatorIndex"]},"GetValidatorsByWithdrawalAddressResponseDto":{"type":"object","properties":{"validators":{"type":"array","description":"Array of validators associated with the withdrawal address","items":{"type":"object","properties":{"publickey":{"type":"string","description":"The public key of the validator"},"validatorindex":{"type":"number","description":"The validator index"}}}},"total":{"type":"number","description":"Total number of validators found"},"withdrawalAddress":{"type":"string","description":"The withdrawal address that was queried"}},"required":["validators","total","withdrawalAddress"]},"ExistingConsolidationDto":{"type":"object","properties":{"targetPubkey":{"type":"string","description":"Target validator public key of the existing consolidation","example":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},"status":{"type":"string","description":"Status of the existing consolidation","example":"PENDING"}},"required":["targetPubkey","status"]},"ValidationErrorDto":{"type":"object","properties":{"code":{"type":"string","enum":["SOURCE_IN_USE","TARGET_AS_SOURCE","MAX_BALANCE_EXCEEDED","VALIDATOR_NOT_FOUND","INVALID_CUSTOMER"],"description":"Error code indicating the type of validation failure","example":"SOURCE_IN_USE"},"message":{"type":"string","description":"Human-readable error message","example":"Source validator is already being used in another consolidation"},"pubkey":{"type":"string","description":"Public key of the validator that caused the error","example":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"existingConsolidation":{"description":"Details of the existing consolidation (when SOURCE_IN_USE error)","allOf":[{"$ref":"#/components/schemas/ExistingConsolidationDto"}]},"targetPubkey":{"type":"string","description":"Target public key (when TARGET_AS_SOURCE error)","example":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},"currentBalanceGwei":{"type":"string","description":"Current balance of the target validator in Gwei","example":"32000000000"},"pendingIncomingGwei":{"type":"string","description":"Pending incoming balance to the target validator in Gwei","example":"1000000000"},"requestedAmountGwei":{"type":"string","description":"Requested consolidation amount in Gwei","example":"32000000000"},"maxBalanceGwei":{"type":"string","description":"Maximum allowed balance for a validator in Gwei","example":"2048000000000"}},"required":["code","message"]},"TargetValidatorDto":{"type":"object","properties":{"pubkey":{"type":"string","description":"Target validator public key (BLS12-381)","example":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},"currentBalanceGwei":{"type":"string","description":"Current balance of the target validator in Gwei","example":"32000000000"},"pendingIncomingGwei":{"type":"string","description":"Sum of all pending incoming consolidations to this validator in Gwei","example":"5000000000"},"projectedBalanceGwei":{"type":"string","description":"Projected balance after all consolidations complete (current + pending + requested) in Gwei","example":"69000000000"}},"required":["pubkey","currentBalanceGwei","pendingIncomingGwei","projectedBalanceGwei"]},"ValidateConsolidationResponseDto":{"type":"object","properties":{"valid":{"type":"boolean","description":"Whether the consolidation request is valid and can be executed","example":true},"errors":{"description":"List of validation errors (only present when valid is false)","type":"array","items":{"$ref":"#/components/schemas/ValidationErrorDto"}},"targetValidator":{"description":"Target validator details including projected balance after consolidation","allOf":[{"$ref":"#/components/schemas/TargetValidatorDto"}]}},"required":["valid"]},"SourceValidatorDto":{"type":"object","properties":{"pubkey":{"type":"string","description":"BLS12-381 public key (0x + 96 hex characters)","example":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"amountGwei":{"type":"string","description":"Amount to consolidate in Gwei","example":"32000000000"}},"required":["pubkey","amountGwei"]},"ValidateConsolidationRequestDto":{"type":"object","properties":{"sources":{"description":"Array of source validators to consolidate from","type":"array","items":{"$ref":"#/components/schemas/SourceValidatorDto"}},"targetPubkey":{"type":"string","description":"Target validator public key (BLS12-381)","example":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},"required":["sources","targetPubkey"]},"BitcoinUtxoStatus":{"type":"object","properties":{"confirmed":{"type":"boolean"},"block_height":{"type":"number"},"block_hash":{"type":"string"},"block_time":{"type":"number"}},"required":["confirmed","block_height","block_hash","block_time"]},"GetBitcoinAddressUtxos":{"type":"object","properties":{"txid":{"type":"string"},"vout":{"type":"number"},"status":{"$ref":"#/components/schemas/BitcoinUtxoStatus"},"value":{"type":"number"}},"required":["txid","vout","status","value"]},"BuildBabylonStakingTransactionResponseDto":{"type":"object","properties":{"unsignedStakingTx":{"type":"string","description":"The unsigned staking transaction PSBT in hex format","example":"70736274ff01007d020000000125e99b2..."},"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"}},"required":["unsignedStakingTx","stakingTxId"]},"BitcoinUtxoDto":{"type":"object","properties":{"txid":{"type":"string","description":"Transaction ID","example":"f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16"},"vout":{"type":"number","description":"Output index","example":0}},"required":["txid","vout"]},"BuildBabylonStakingTransactionDto":{"type":"object","properties":{"publicKey":{"type":"string","description":"Public key in hex format (compressed or uncompressed)","example":"02a0434d9e47f3c86235477c7b1ae6ae5d3442d49b1943c2b752a68e2a47e247c7"},"stakingAddress":{"type":"string","description":"Staking address (must be valid for current network)","example":"bc1..."},"amountSatoshi":{"type":"number","description":"Amount in satoshis","example":1000000},"timeLock":{"type":"number","description":"Time lock in blocks","example":10000},"utxos":{"description":"Array of UTXOs to use for the transaction","type":"array","items":{"$ref":"#/components/schemas/BitcoinUtxoDto"}},"autoFund":{"type":"boolean","description":"Whether to automatically fund the transaction","default":false},"feeRate":{"type":"number","description":"Fee rate in satoshis per byte","example":10}},"required":["publicKey","stakingAddress","amountSatoshi","timeLock"]},"BitcoinTransactionResponseDto":{"type":"object","properties":{"txId":{"type":"string","description":"The transaction ID","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"}},"required":["txId"]},"SubmitBabylonStakingTransactionDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"signedStakingTx":{"type":"string","description":"The signed staking transaction PSBT in hex format","example":"70736274ff01007d020000000125e99b2..."}},"required":["stakingTxId","signedStakingTx"]},"GetBabylonDelegationPayloadsResponseDto":{"type":"object","properties":{"slashingPsbtHex":{"type":"string","description":"The slashing transaction PSBT in hex format that needs to be signed"},"unbondingSlashingPsbtHex":{"type":"string","description":"The unbonding slashing transaction PSBT in hex format that needs to be signed"},"babylonAddress":{"type":"string","description":"The Babylon address that needs to be signed as proof of ownership"}},"required":["slashingPsbtHex","unbondingSlashingPsbtHex","babylonAddress"]},"GetBabylonDelegationPayloadsDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"babylonAddress":{"type":"string","description":"Babylon address","example":"bbn1abc123..."},"signedStakingTxHex":{"type":"string","description":"Signed staking transaction hex (required for post-stake flow only)","example":"0200000001..."}},"required":["stakingTxId","babylonAddress"]},"BuildBabylonRegistrationTransactionResponseDto":{"type":"object","properties":{"transaction":{"type":"string","description":"The unsigned Babylon transaction in base64 format ready to be signed and broadcast"},"gasEstimate":{"type":"number","description":"The estimated gas required for the transaction on the Babylon chain"}},"required":["transaction","gasEstimate"]},"BabylonSignedPayloadsDto":{"type":"object","properties":{"slashingPsbtHex":{"type":"string","description":"Slashing PSBT hex string","example":"70736274..."},"unbondingSlashingPsbtHex":{"type":"string","description":"Unbonding slashing PSBT hex string","example":"70736274..."},"babylonAddress":{"type":"string","description":"Babylon address (signed message)","example":"bbn..."}},"required":["slashingPsbtHex","unbondingSlashingPsbtHex","babylonAddress"]},"BuildBabylonRegistrationTransactionDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"Staking transaction ID","example":"txid123..."},"signedPayloads":{"description":"Signed payloads containing PSBT hex strings and Babylon address","allOf":[{"$ref":"#/components/schemas/BabylonSignedPayloadsDto"}]}},"required":["stakingTxId","signedPayloads"]},"BabylonStakingTransactionDto":{"type":"object","properties":{"txid":{"type":"string"},"confirmed":{"type":"boolean"},"broadcasted":{"type":"boolean"},"depth":{"type":"number"}},"required":["txid","confirmed","broadcasted","depth"]},"BabylonCovenantSignatureDto":{"type":"object","properties":{"cov_pk":{"type":"string","description":"The covenant public key"},"adaptor_sigs":{"description":"Array of adaptor signatures","type":"array","items":{"type":"string"}}},"required":["cov_pk","adaptor_sigs"]},"CovenantUnbondingSignatureDto":{"type":"object","properties":{"pk":{"type":"string","description":"The covenant public key"},"sig":{"type":"string","description":"The signature"}},"required":["pk","sig"]},"BabylonUndelegationResponseDto":{"type":"object","properties":{"unbonding_tx_hex":{"type":"string","description":"The hex-encoded unbonding transaction"},"covenant_unbonding_sig_list":{"description":"List of covenant unbonding signatures","type":"array","items":{"$ref":"#/components/schemas/CovenantUnbondingSignatureDto"}},"slashing_tx_hex":{"type":"string","description":"The hex-encoded slashing transaction"},"delegator_slashing_sig_hex":{"type":"string","description":"The delegator's slashing signature in hex"},"covenant_slashing_sigs":{"description":"List of covenant slashing signatures","type":"array","items":{"$ref":"#/components/schemas/BabylonCovenantSignatureDto"}},"delegator_unbonding_info_response":{"type":"object","description":"Delegator unbonding info response","nullable":true}},"required":["unbonding_tx_hex","covenant_unbonding_sig_list","slashing_tx_hex","delegator_slashing_sig_hex","covenant_slashing_sigs"]},"BtcDelegationDto":{"type":"object","properties":{"staker_addr":{"type":"string","description":"The staker's address"},"btc_pk":{"type":"string","description":"The Bitcoin public key"},"fp_btc_pk_list":{"description":"List of finality provider Bitcoin public keys","type":"array","items":{"type":"string"}},"staking_time":{"type":"number","description":"The staking time in blocks"},"start_height":{"type":"number","description":"The start height of the delegation"},"end_height":{"type":"number","description":"The end height of the delegation"},"total_sat":{"type":"string","description":"Total satoshis being staked"},"staking_tx_hex":{"type":"string","description":"The hex-encoded staking transaction"},"slashing_tx_hex":{"type":"string","description":"The hex-encoded slashing transaction"},"delegator_slash_sig_hex":{"type":"string","description":"The delegator's slash signature in hex"},"covenant_sigs":{"description":"List of covenant signatures","type":"array","items":{"$ref":"#/components/schemas/BabylonCovenantSignatureDto"}},"staking_output_idx":{"type":"number","description":"The staking output index"},"active":{"type":"boolean","description":"Whether the delegation is active"},"status_desc":{"type":"string","description":"Description of the delegation status"},"unbonding_time":{"type":"number","description":"The unbonding time in blocks"},"undelegation_response":{"description":"The undelegation response","nullable":true,"allOf":[{"$ref":"#/components/schemas/BabylonUndelegationResponseDto"}]},"params_version":{"type":"number","description":"The parameters version"}},"required":["staker_addr","btc_pk","fp_btc_pk_list","staking_time","start_height","end_height","total_sat","staking_tx_hex","slashing_tx_hex","delegator_slash_sig_hex","covenant_sigs","staking_output_idx","active","status_desc","unbonding_time","params_version"]},"BabylonDelegationInfoResponseDto":{"type":"object","properties":{"btc_delegation":{"description":"The BTC delegation information","allOf":[{"$ref":"#/components/schemas/BtcDelegationDto"}]}},"required":["btc_delegation"]},"BabylonUnbondingTransactionDto":{"type":"object","properties":{"txid":{"type":"string"},"confirmed":{"type":"boolean"},"broadcasted":{"type":"boolean"}},"required":["txid","confirmed","broadcasted"]},"GetBabylonStakingStatusResponseDto":{"type":"object","properties":{"status":{"type":"string"},"isRegistered":{"type":"boolean"},"statusExplanation":{"type":"string"},"stakingTransaction":{"$ref":"#/components/schemas/BabylonStakingTransactionDto"},"delegationInfo":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/BabylonDelegationInfoResponseDto"}]},"unbondingTransaction":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/BabylonUnbondingTransactionDto"}]},"registrationType":{"type":"string","description":"The type of registration (pre-stake or post-stake)","example":"pre-stake"},"preStakeStatus":{"type":"string","description":"Pre-stake verification status if applicable","enum":["pending","verified","rejected"]},"babylonRegistrationTxHash":{"type":"string","description":"Babylon registration transaction hash for pre-stake","example":"ABC123..."},"canFinalize":{"type":"boolean","description":"Whether the pre-stake can be finalized","example":false},"covenantSignatures":{"description":"Covenant signatures if verified","type":"array","items":{"type":"string"}},"unsignedStakingPsbt":{"type":"string","description":"Unsigned staking PSBT for pre-stake resumption","example":"70736274ff0100..."}},"required":["status","isRegistered","statusExplanation","stakingTransaction","delegationInfo","unbondingTransaction"]},"BuildBabylonUnbondingTransactionResponseDto":{"type":"object","properties":{"unbondingPsbt":{"type":"string","description":"The partially signed Bitcoin transaction (PSBT) that needs to be signed by the staker","example":"70736274ff01007d020000000125e99b2..."}},"required":["unbondingPsbt"]},"BabylonStakingTxRequestDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"}},"required":["stakingTxId"]},"SubmitBabylonUnbondingTransactionDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"signedUnbondingTx":{"type":"string","description":"The signed unbonding transaction PSBT in hex format","example":"70736274ff01007d020000000125e99b2..."}},"required":["stakingTxId","signedUnbondingTx"]},"BuildBabylonWithdrawalTransactionResponseDto":{"type":"object","properties":{"withdrawalPsbt":{"type":"string","description":"The unsigned withdrawal PSBT in hex format","example":"70736274ff0100..."},"feeRate":{"type":"number","description":"The fee rate used for the withdrawal transaction (sat/vB)","example":10}},"required":["withdrawalPsbt","feeRate"]},"BuildBabylonWithdrawalTransactionDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"withdrawalType":{"type":"string","description":"The type of withdrawal","enum":["early_unbonded","timelock_expired","slashing"],"example":"early_unbonded"},"feeRate":{"type":"number","description":"Fee rate in satoshis per byte","example":10}},"required":["stakingTxId","withdrawalType"]},"SubmitBabylonWithdrawalTransactionDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"signedWithdrawalTx":{"type":"string","description":"The signed withdrawal transaction in hex format","example":"02000000..."},"withdrawalType":{"type":"string","description":"The type of withdrawal","enum":["early_unbonded","timelock_expired","slashing"],"example":"early_unbonded"}},"required":["stakingTxId","signedWithdrawalTx","withdrawalType"]},"BabylonStakingParamsDto":{"type":"object","properties":{"minStakingValueSat":{"type":"number","description":"Minimum staking value in satoshis","example":50000},"maxStakingValueSat":{"type":"number","description":"Maximum staking value in satoshis","example":10000000},"minStakingTimeBlocks":{"type":"number","description":"Minimum staking time in blocks","example":10000},"maxStakingTimeBlocks":{"type":"number","description":"Maximum staking time in blocks","example":100000},"unbondingTime":{"type":"number","description":"Unbonding time in blocks","example":1000},"confirmationDepth":{"type":"number","description":"Number of Bitcoin confirmations required before delegation","example":10},"version":{"type":"number","description":"Current staking parameter version","example":0},"isStakingOpen":{"type":"boolean","description":"Whether staking is currently open","example":true}},"required":["minStakingValueSat","maxStakingValueSat","minStakingTimeBlocks","maxStakingTimeBlocks","unbondingTime","confirmationDepth","version","isStakingOpen"]},"GetBabylonStakingParamsResponseDto":{"type":"object","properties":{"params":{"description":"Current staking parameters","allOf":[{"$ref":"#/components/schemas/BabylonStakingParamsDto"}]}},"required":["params"]},"BabylonStakingDetailDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The staking transaction ID","example":"f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16"},"amountSatoshi":{"type":"number","description":"Amount staked in satoshis","example":100000},"timeLock":{"type":"number","description":"Time lock in blocks","example":10000},"status":{"type":"string","description":"Current status of the staking","example":"registration-transaction-confirmed"},"statusDescription":{"type":"string","description":"Human-readable description of the current status","example":"The registration transaction has been broadcasted and confirmed, your staking is now active"},"isRegistered":{"type":"boolean","description":"Whether the staking is registered on Babylon","example":true},"stakingAddress":{"type":"string","description":"Bitcoin staking address","example":"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"},"babylonAddress":{"type":"string","description":"Babylon address associated with this stake","example":"bbn1..."},"finalityProviderBtcPk":{"type":"string","description":"Public key of the finality provider","example":"02abc..."},"unbondingTxId":{"type":"string","description":"Unbonding transaction ID if unbonding was initiated","example":"abc123..."},"withdrawalTxId":{"type":"string","description":"Withdrawal transaction ID if withdrawal was completed","example":"def456..."},"createdAt":{"format":"date-time","type":"string","description":"When the staking was created","example":"2024-01-01T00:00:00.000Z"},"updatedAt":{"format":"date-time","type":"string","description":"When the staking was last updated","example":"2024-01-01T00:00:00.000Z"},"registrationType":{"type":"string","description":"The type of registration (pre-stake or post-stake)","example":"pre-stake"},"preStakeStatus":{"type":"string","description":"Pre-stake verification status if applicable","enum":["pending","verified","rejected"]},"delegationActive":{"type":"boolean","description":"Whether the delegation is active on Babylon","example":true},"delegationStatus":{"type":"string","description":"Delegation status from Babylon","example":"ACTIVE"},"isAvailable":{"type":"boolean","description":"Whether the delegation is available (active and status is ACTIVE)","example":true}},"required":["stakingTxId","amountSatoshi","timeLock","status","statusDescription","isRegistered","stakingAddress","finalityProviderBtcPk"]},"GetBabylonStakingDetailsResponseDto":{"type":"object","properties":{"stakingDetails":{"description":"List of staking details for the address","type":"array","items":{"$ref":"#/components/schemas/BabylonStakingDetailDto"}},"totalStaked":{"type":"number","description":"Total amount staked across all transactions in satoshis","example":500000},"totalActiveStaked":{"type":"number","description":"Total amount currently actively staked in satoshis","example":300000},"stakingDetailsCount":{"type":"number","description":"Total number of staking transactions","example":5},"activeStakesCount":{"type":"number","description":"Number of active stakes","example":3}},"required":["stakingDetails","totalStaked","totalActiveStaked","stakingDetailsCount","activeStakesCount"]},"BuildBabylonPreStakeRegistrationResponseDto":{"type":"object","properties":{"unsignedStakingPsbt":{"type":"string","description":"The unsigned staking transaction PSBT in hex format","example":"70736274ff01007d020000000125e99b2..."},"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"}},"required":["unsignedStakingPsbt","stakingTxId"]},"BuildBabylonPreStakeRegistrationDto":{"type":"object","properties":{"publicKey":{"type":"string","description":"Public key in hex format (compressed or uncompressed)","example":"02a0434d9e47f3c86235477c7b1ae6ae5d3442d49b1943c2b752a68e2a47e247c7"},"stakingAddress":{"type":"string","description":"Staking address (must be valid for current network)","example":"bc1..."},"amountSatoshi":{"type":"number","description":"Amount in satoshis","example":1000000},"timeLock":{"type":"number","description":"Time lock in blocks","example":10000},"feeRate":{"type":"number","description":"Fee rate in satoshis per byte","example":10},"utxos":{"description":"Specific UTXOs to use (optional)","type":"array","items":{"$ref":"#/components/schemas/BitcoinUtxoDto"}},"autoFund":{"type":"boolean","description":"Whether to automatically fund the transaction","default":false},"babylonAddress":{"type":"string","description":"Babylon address for the delegation","example":"bbn1abc123..."}},"required":["publicKey","stakingAddress","amountSatoshi","timeLock","autoFund","babylonAddress"]},"BuildBabylonPreStakeTransactionResponseDto":{"type":"object","properties":{"babylonRegistrationTransaction":{"type":"string","description":"The unsigned Babylon registration transaction in base64 format"},"gasEstimate":{"type":"number","description":"The estimated gas required for the Babylon transaction","example":150000}},"required":["babylonRegistrationTransaction","gasEstimate"]},"BuildBabylonPreStakeTransactionDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The staking transaction ID","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"slashingPsbtHex":{"type":"string","description":"The signed slashing transaction PSBT in hex format","example":"70736274ff0100..."},"unbondingSlashingPsbtHex":{"type":"string","description":"The signed unbonding slashing transaction PSBT in hex format","example":"70736274ff0100..."},"babylonAddress":{"type":"string","description":"The signed Babylon address for proof of possession","example":"base64SignatureString..."}},"required":["stakingTxId","slashingPsbtHex","unbondingSlashingPsbtHex","babylonAddress"]},"SubmitBabylonPreStakeRegistrationResponseDto":{"type":"object","properties":{"txId":{"type":"string","description":"The Babylon transaction hash","example":"ABC123DEF456..."}},"required":["txId"]},"SubmitBabylonPreStakeRegistrationDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"babylonTxHash":{"type":"string","description":"The Babylon transaction hash after user broadcasts it","example":"ABC123DEF456..."},"signedBabylonTx":{"type":"string","description":"The signed Babylon registration transaction in base64 format (optional, used only to verify the provided hash matches the transaction)","example":"CvQFCvEFC..."}},"required":["stakingTxId","babylonTxHash"]},"FinalizeBabylonPreStakeResponseDto":{"type":"object","properties":{"txId":{"type":"string","description":"The Bitcoin transaction ID","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"}},"required":["txId"]},"FinalizeBabylonPreStakeDto":{"type":"object","properties":{"stakingTxId":{"type":"string","description":"The transaction ID of the staking transaction","example":"e7344f4673bc62cdbcd501c629feda83784bddd900a40dc088ec26241817576a"},"signedStakingTx":{"type":"string","description":"The signed staking transaction in hex format","example":"02000000..."}},"required":["stakingTxId","signedStakingTx"]},"ActivityHistoryItem":{"type":"object","properties":{"date":{"format":"date-time","type":"string","description":"Transaction date","example":"2024-01-15T10:30:00Z"},"value":{"type":"object","description":"Transaction value","example":"32000"},"blockchain":{"type":"string","description":"Blockchain network","enum":["ethereum","solana"],"example":"ethereum"},"metadata":{"type":"object","description":"Additional metadata"}},"required":["date","value","blockchain"]},"WebsiteDataPrices":{"type":"object","properties":{"solPrice":{"type":"number"},"ethPrice":{"type":"number"},"nearPrice":{"type":"number"},"tonPrice":{"type":"number"},"polPrice":{"type":"number"},"eigenPrice":{"type":"number"}},"required":["solPrice","ethPrice","nearPrice","tonPrice","polPrice","eigenPrice"]},"WebsiteDataAssetsUnderStake":{"type":"object","properties":{"sol":{"type":"number"},"eth":{"type":"number"},"near":{"type":"number"},"ton":{"type":"number"},"pol":{"type":"number"},"eigen":{"type":"number"}},"required":["sol","eth","near","ton","pol","eigen"]},"WebsiteData":{"type":"object","properties":{"prices":{"$ref":"#/components/schemas/WebsiteDataPrices"},"assetsUnderStake":{"$ref":"#/components/schemas/WebsiteDataAssetsUnderStake"}},"required":["prices","assetsUnderStake"]},"PierTwoEigenLayerInfo":{"type":"object","properties":{"operatorAddress":{"type":"string"},"eigenPodManagerAddress":{"type":"string"}},"required":["operatorAddress","eigenPodManagerAddress"]},"PierTwoEthereumInfo":{"type":"object","properties":{"batchDepositContractAddress":{"type":"string"},"pectraBatchDepositContractAddress":{"type":"string"},"beaconDepositContractAddress":{"type":"string"},"ethValidatorWithdrawalContractAddress":{"type":"string"},"ethValidatorConsolidationContractAddress":{"type":"string"},"eigenlayer":{"$ref":"#/components/schemas/PierTwoEigenLayerInfo"},"currentEpoch":{"type":"number"},"pectraForkEpoch":{"type":"number"},"network":{"type":"string"},"chainId":{"type":"number"},"validatorMaxEBGwei":{"type":"number"},"validatorMinEBGwei":{"type":"number"}},"required":["batchDepositContractAddress","pectraBatchDepositContractAddress","beaconDepositContractAddress","ethValidatorWithdrawalContractAddress","ethValidatorConsolidationContractAddress","eigenlayer","currentEpoch","pectraForkEpoch","network","chainId","validatorMaxEBGwei","validatorMinEBGwei"]},"PierTwoSolanaInfo":{"type":"object","properties":{"voteAccountAddress":{"type":"string"},"network":{"type":"string"}},"required":["voteAccountAddress","network"]},"PierTwoBitcoinInfo":{"type":"object","properties":{"finalityProviderPK":{"type":"string"},"bitcoinNetwork":{"type":"string"},"babylonNetwork":{"type":"string"},"babylonChainId":{"type":"string"}},"required":["finalityProviderPK","bitcoinNetwork","babylonNetwork","babylonChainId"]},"PierTwoCardanoInfo":{"type":"object","properties":{"network":{"type":"string"},"defaultPoolId":{"type":"string"}},"required":["network","defaultPoolId"]},"PierTwoInfo":{"type":"object","properties":{"ethereum":{"$ref":"#/components/schemas/PierTwoEthereumInfo"},"solana":{"$ref":"#/components/schemas/PierTwoSolanaInfo"},"bitcoin":{"$ref":"#/components/schemas/PierTwoBitcoinInfo"},"cardano":{"$ref":"#/components/schemas/PierTwoCardanoInfo"}},"required":["ethereum","solana","bitcoin","cardano"]},"SystemInfoResponse":{"type":"object","properties":{"apiGatewayVersion":{"type":"string","example":"1.0.0","description":"Version of the API Gateway service"},"auEthStakingApiVersion":{"type":"string","example":"1.0.0","description":"Version of the internal Ethereum staking API for AU region"},"usEthStakingApiVersion":{"type":"string","example":"1.0.0","description":"Version of the internal Ethereum staking API for US region"}},"required":["apiGatewayVersion","auEthStakingApiVersion","usEthStakingApiVersion"]},"CardanoStakeAccount":{"type":"object","properties":{"stakeAccountAddress":{"type":"string"},"poolId":{"type":"string"},"lovelace":{"type":"string"},"status":{"type":"string"},"reference":{"type":"string"},"label":{"type":"string"},"activationEpoch":{"type":"number"},"lastSyncEpoch":{"type":"number"},"totalWithdrawals":{"type":"string"},"withdrawableAmount":{"type":"string"},"drepId":{"type":"string"},"performanceTotal":{"type":"string"},"performance30d":{"type":"string"},"performance7d":{"type":"string"}},"required":["stakeAccountAddress","poolId","lovelace","status","reference","label","activationEpoch","lastSyncEpoch","totalWithdrawals","withdrawableAmount","drepId","performanceTotal","performance30d","performance7d"]},"CardanoStakingPerformanceSummary":{"type":"object","properties":{"stakingRewardsTotal":{"type":"string"},"stakingRewards7d":{"type":"string"},"stakingRewards30d":{"type":"string"}},"required":["stakingRewardsTotal","stakingRewards7d","stakingRewards30d"]},"CardanoStakeAccountRewards":{"type":"object","properties":{"stakeAccountAddress":{"type":"string"},"epoch":{"type":"number"},"type":{"type":"string"},"dayStart":{"type":"number"},"epochStart":{"type":"number"},"dayEnd":{"type":"number"},"epochEnd":{"type":"number"},"consensusRewardAmount":{"type":"string"},"poolId":{"type":"string"},"adaPrice":{"type":"number"}},"required":["stakeAccountAddress","epoch","type","dayStart","epochStart","dayEnd","epochEnd","consensusRewardAmount","poolId","adaPrice"]},"AddCardanoStakeAccountDto":{"type":"object","properties":{"stakeAccountAddress":{"type":"string","description":"The stake account address to add to the system","example":"stake1u9klnfr0v4f2k3v2c0t4d0h3l2p8x9q6r7s8t9u0v1w2x3y4z5a6b7c8d9e0f"},"reference":{"type":"string","description":"Arbitrary reference/grouping, this will show in the UI as the account","example":"Test Fund"},"label":{"type":"string","description":"Secondary label for this particular stake position","example":"Balance Sheet Stake"}},"required":["stakeAccountAddress","reference"]},"CardanoUtxo":{"type":"object","properties":{"txHash":{"type":"string","description":"The transaction hash","example":"0x1234567890abcdef..."},"outputIndex":{"type":"number","description":"The output index","example":0},"lovelace":{"type":"string","description":"The amount of lovelace in the output","example":"1000000"},"address":{"type":"string","description":"The address of the output","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"}},"required":["txHash","outputIndex","lovelace","address"]},"CardanoTransactionCraftingResponse":{"type":"object","properties":{"unsignedTx":{"type":"string","description":"The unsigned transaction in CBOR format","example":"84a50081825820..."},"fee":{"type":"string","description":"The transaction fee in lovelace","example":"170000"},"utxosIn":{"description":"UTXOs being spent as part of the transaction","example":[{"txHash":"0x1234567890abcdef...","outputIndex":0,"lovelacee":"1000000","address":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"}],"type":"array","items":{"$ref":"#/components/schemas/CardanoUtxo"}},"utxosOut":{"description":"UTXOs being created as change outputs","example":[{"txHash":"0x1234567890abcdef...","outputIndex":0,"lovelace":"1000000","address":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"}],"type":"array","items":{"$ref":"#/components/schemas/CardanoUtxo"}}},"required":["unsignedTx","fee","utxosIn","utxosOut"]},"CardanoRegisterStakeAddressDto":{"type":"object","properties":{"stakeAddress":{"type":"string","description":"The stake address to use for staking operations","example":"stake1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"utxoAddress":{"type":"string","description":"The address to use for UTXO selection","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"changeAddress":{"type":"string","description":"The address to spend utxos to. If not provided, the change will be returned to the utxoAddress","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"reference":{"type":"string","description":"Arbitrary reference/grouping","example":"Test Fund"},"label":{"type":"string","description":"Optional secondary label for this particular stake position","example":"Balance Sheet Stake"}},"required":["stakeAddress","utxoAddress","reference"]},"CardanoDeregisterStakeAddressDto":{"type":"object","properties":{"stakeAddress":{"type":"string","description":"The stake address to use for staking operations","example":"stake1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"utxoAddress":{"type":"string","description":"The address to use for UTXO selection","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"changeAddress":{"type":"string","description":"The address to spend utxos to. If not provided, the change will be returned to the utxoAddress","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"}},"required":["stakeAddress","utxoAddress"]},"CardanoDelegateStakeDto":{"type":"object","properties":{"stakeAddress":{"type":"string","description":"The stake address to use for staking operations","example":"stake1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"utxoAddress":{"type":"string","description":"The address to use for UTXO selection","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"changeAddress":{"type":"string","description":"The address to spend utxos to. If not provided, the change will be returned to the utxoAddress","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"reference":{"type":"string","description":"Arbitrary reference/grouping","example":"Test Fund"},"label":{"type":"string","description":"Optional secondary label for this particular stake position","example":"Balance Sheet Stake"}},"required":["stakeAddress","utxoAddress","reference"]},"CardanoRegisterAndDelegateDto":{"type":"object","properties":{"stakeAddress":{"type":"string","description":"The stake address to use for staking operations","example":"stake1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"utxoAddress":{"type":"string","description":"The address to use for UTXO selection","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"changeAddress":{"type":"string","description":"The address to spend utxos to. If not provided, the change will be returned to the utxoAddress","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"reference":{"type":"string","description":"Arbitrary reference/grouping","example":"Test Fund"},"label":{"type":"string","description":"Optional secondary label for this particular stake position","example":"Balance Sheet Stake"}},"required":["stakeAddress","utxoAddress","reference"]},"CardanoStakingRewardsWithdrawalDto":{"type":"object","properties":{"stakeAddress":{"type":"string","description":"The stake address to use for staking operations","example":"stake1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"utxoAddress":{"type":"string","description":"The address to use for UTXO selection","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"changeAddress":{"type":"string","description":"The address to spend utxos to. If not provided, the change will be returned to the utxoAddress","example":"addr1qdzmqvfdnxsn4a3hd57x435madswynt4hqw8n7f2pdq05g4995re"},"amountLovelace":{"type":"string","description":"The amount of lovelace to withdraw","example":"1000000"}},"required":["stakeAddress","utxoAddress","amountLovelace"]},"CardanoTransactionSubmissionResponse":{"type":"object","properties":{"txHash":{"type":"string","description":"The transaction hash of the submitted transaction","example":"0x1234567890abcdef..."}},"required":["txHash"]},"SubmitCardanoTransactionDto":{"type":"object","properties":{"signedTx":{"type":"string","description":"The signed transaction in CBOR hex format","example":"84a50081825820..."}},"required":["signedTx"]},"CardanoTransactionStatusResponse":{"type":"object","properties":{"txHash":{"type":"string","description":"The transaction hash of the submitted transaction","example":"0x1234567890abcdef..."},"block":{"type":"number","description":"The block number of the transaction","example":123123123},"blockTime":{"type":"number","description":"The block number of the transaction","example":1635505891},"slot":{"type":"number","description":"The slot number of the transaction","example":42000000},"fees":{"type":"string","description":"The fees of the transaction","example":1000000}},"required":["txHash","block","blockTime","slot","fees"]},"RegisterLsEthResponse":{"type":"object","properties":{"status":{"type":"string","example":"ACTIVE","description":"Account status"},"createdAt":{"type":"string","example":"2024-01-15T10:30:00Z","description":"Account creation timestamp"}},"required":["status","createdAt"]},"RegistrationStatusResponse":{"type":"object","properties":{"status":{"type":"string","example":"ACTIVE","description":"Account status"}},"required":["status"]},"LsEthWalletChallengeResponse":{"type":"object","properties":{"message":{"type":"string","description":"Message to be signed by the wallet","example":"Please sign this message to verify wallet ownership. Nonce: abc123def456"},"nonce":{"type":"string","description":"Unique nonce for this challenge","example":"abc123def456"},"expiresAt":{"format":"date-time","type":"string","description":"Expiration timestamp for this challenge","example":"2023-07-28T12:00:00.000Z"}},"required":["message","nonce","expiresAt"]},"LsEthWalletChallengeRequest":{"type":"object","properties":{"address":{"type":"string","description":"Ethereum wallet address to verify ownership of","example":"0x742d35Cc6634C0532925a3b8D084FB0F26f01234"}},"required":["address"]},"LsEthWalletDto":{"type":"object","properties":{"address":{"type":"string","description":"Wallet address"},"allowlisted":{"type":"boolean","description":"Whether the wallet is allowlisted"},"createdAt":{"type":"string","description":"Time the wallet was created"},"id":{"type":"string","description":"Our UUID for this wallet"},"onPlatform":{"type":"boolean","description":"Whether the wallet is on platform"},"status":{"type":"string","description":"Status of the submission of the wallet account on-chain"},"type":{"type":"string","description":"The type of wallet - chain or protocol it exists on"}},"required":["address","allowlisted","createdAt","id","onPlatform","status","type"]},"LsEthWalletVerifyResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates if wallet was successfully added","example":true},"wallet":{"description":"Wallet information from Alluvial","allOf":[{"$ref":"#/components/schemas/LsEthWalletDto"}]}},"required":["success","wallet"]},"LsEthWalletVerifyRequest":{"type":"object","properties":{"address":{"type":"string","description":"Ethereum wallet address being verified","example":"0x742d35Cc6634C0532925a3b8D084FB0F26f01234"},"nonce":{"type":"string","description":"Nonce from the challenge response","example":"abc123def456"},"signature":{"type":"string","description":"Signature of the challenge message","example":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}},"required":["address","nonce","signature"]},"LsEthListWalletsResponse":{"type":"object","properties":{"wallets":{"description":"Array of wallets for the user","type":"array","items":{"$ref":"#/components/schemas/LsEthWalletDto"}}},"required":["wallets"]},"LsEthProtocolStatsResponse":{"type":"object","properties":{"aSrr7d":{"type":"string","description":"7-day average staking reward rate","example":"3.5"},"conversionRate":{"type":"string","description":"ETH to LsETH conversion rate","example":"1.0423421489732119402"},"date":{"type":"string","description":"Date of the protocol statistics","example":"2025-08-08T00:58:48Z"},"grossFeeLsEth":{"type":"string","description":"Gross fee in LsETH","example":"1234.56"},"grossFeeRate":{"type":"string","description":"Gross fee rate","example":"0.1"},"oracleReport":{"type":"string","description":"Oracle report reference","example":"19fedfa926a41b9d2e98f4f5bb30cd275de6be4cd6d9a45f20232bef61b6fa4600000088"},"protocolServiceFeeRate":{"type":"string","description":"Protocol service fee rate","example":"0.1"},"rewardsEth":{"type":"string","description":"Total rewards in ETH","example":"12345.67"},"totalEthStaked":{"type":"string","description":"Total ETH staked in the protocol","example":"1000000.4234949295"},"totalLsEthSupply":{"type":"string","description":"Total LsETH token supply","example":"950000.999586858321"},"totalProtocolActiveKeysCount":{"type":"number","description":"Total number of active protocol validator keys","example":25000},"totalProtocolBurnsLsEth":{"type":"string","description":"Total LsETH burned by the protocol","example":"50542.59394311209"},"totalProtocolMintsLsEth":{"type":"string","description":"Total LsETH minted by the protocol","example":"103509.4500201346984"}},"required":["aSrr7d","conversionRate","date","grossFeeLsEth","grossFeeRate","oracleReport","protocolServiceFeeRate","rewardsEth","totalEthStaked","totalLsEthSupply","totalProtocolActiveKeysCount","totalProtocolBurnsLsEth","totalProtocolMintsLsEth"]},"LsEthDepositDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"amountWei":{"type":"string","description":"Amount of ETH to deposit in wei","example":"1000000000000000000"}},"required":["fromAddress","amountWei"]},"LsEthRedeemDto":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to send the transaction from, this is required for accurate gas estimation and nonce calculation","example":"0x0000000000000000000000000000000000000000"},"gasEstimateMultiplier":{"type":"number","description":"multiplier to apply to gas estimate, defaults to 1.2","example":1.2},"lsEthAmountWei":{"type":"string","description":"Amount of lsETH to redeem in wei","example":"1000000000000000000"},"recipient":{"type":"string","description":"Recipient address for the redeemed ETH (can be different from fromAddress)","example":"0x1234567890123456789012345678901234567890"}},"required":["fromAddress","lsEthAmountWei","recipient"]},"LsEthWalletBalanceResponse":{"type":"object","properties":{"address":{"type":"string","description":"Wallet address","example":"0xc8cd785c6ba55d71a6530c08d1df7ecbf090299c"},"lsEthBalance":{"type":"string","description":"LsETH balance","example":"295022399276590070922"},"blockNumber":{"type":"number","description":"Block number","example":962779}},"required":["address","lsEthBalance","blockNumber"]},"LsEthRedeemRequestDto":{"type":"object","properties":{"id":{"type":"number","example":1234,"description":"The ID of the redeem request"},"owner":{"type":"string","example":"0x1234...5678","description":"The owner of the redeem request"},"totalAmountLsEth":{"type":"string","example":"1000000000000000000","description":"The amount of the redeem request in lsETH (wei)"},"maxRedeemableAmountEth":{"type":"string","example":"1000000000000000000","description":"The maximum amount of ETH redeemable by this request (wei)"},"claimableAmountLsEth":{"type":"string","example":"1000000000000000000","description":"The possible amount available to claim in lsETH (wei)"},"claimedAmountEth":{"type":"string","example":"0","description":"The amount already claimed in ETH (wei)"},"claimedAmountLsEth":{"type":"string","example":"0","description":"The amount already claimed in lsETH (wei)"},"requestedAt":{"type":"number","example":19000000,"description":"Block number when the request was made"},"timestamp":{"type":"string","example":"2024-01-20T10:30:00Z","description":"Timestamp when the request was made"},"statusClaim":{"type":"string","enum":["NOT_CLAIMED","PARTIALLY_CLAIMED","FULLY_CLAIMED","PENDING_SATISFACTION","PARTIALLY_SATISFIED","FULLY_SATISFIED"],"example":"NOT_CLAIMED","description":"The status of the claimed request"},"statusSatisfaction":{"type":"string","enum":["NOT_CLAIMED","PARTIALLY_CLAIMED","FULLY_CLAIMED","PENDING_SATISFACTION","PARTIALLY_SATISFIED","FULLY_SATISFIED"],"example":"PENDING_SATISFACTION","description":"The status of the satisfaction (withdrawal stack matching the redeem queue)"},"withdrawalEventId":{"type":"number","example":123,"description":"The withdrawal event ID needed to claim the redeem (or -1 when no withdrawals available)"},"height":{"type":"number","example":100000,"description":"The height is the cumulative sum of all the sizes of preceding redeem requests"}},"required":["id","owner","totalAmountLsEth","maxRedeemableAmountEth","claimableAmountLsEth","claimedAmountEth","claimedAmountLsEth","requestedAt","timestamp","statusClaim","statusSatisfaction","withdrawalEventId","height"]},"LsEthListRedeemsResponse":{"type":"object","properties":{"redeems":{"description":"List of redemption requests","type":"array","items":{"$ref":"#/components/schemas/LsEthRedeemRequestDto"}}},"required":["redeems"]},"LsEthRedeemDetailsResponse":{"type":"object","properties":{"id":{"type":"number","example":1234,"description":"The ID of the redeem request"},"owner":{"type":"string","example":"0x1234...5678","description":"The owner of the redeem request"},"totalAmountLsEth":{"type":"string","example":"1000000000000000000","description":"The amount of the redeem request in lsETH (wei)"},"maxRedeemableAmountEth":{"type":"string","example":"1000000000000000000","description":"The maximum amount of ETH redeemable by this request (wei)"},"claimableAmountLsEth":{"type":"string","example":"1000000000000000000","description":"The possible amount available to claim in lsETH (wei)"},"claimedAmountEth":{"type":"string","example":"0","description":"The amount already claimed in ETH (wei)"},"claimedAmountLsEth":{"type":"string","example":"0","description":"The amount already claimed in lsETH (wei)"},"requestedAt":{"type":"number","example":19000000,"description":"Block number when the request was made"},"timestamp":{"type":"string","example":"2024-01-20T10:30:00Z","description":"Timestamp when the request was made"},"statusClaim":{"type":"string","enum":["NOT_CLAIMED","PARTIALLY_CLAIMED","FULLY_CLAIMED","PENDING_SATISFACTION","PARTIALLY_SATISFIED","FULLY_SATISFIED"],"example":"NOT_CLAIMED","description":"The status of the claimed request"},"statusSatisfaction":{"type":"string","enum":["NOT_CLAIMED","PARTIALLY_CLAIMED","FULLY_CLAIMED","PENDING_SATISFACTION","PARTIALLY_SATISFIED","FULLY_SATISFIED"],"example":"PENDING_SATISFACTION","description":"The status of the satisfaction (withdrawal stack matching the redeem queue)"},"withdrawalEventId":{"type":"number","example":123,"description":"The withdrawal event ID needed to claim the redeem (or -1 when no withdrawals available)"},"height":{"type":"number","example":100000,"description":"The height is the cumulative sum of all the sizes of preceding redeem requests"},"customerId":{"type":"string","example":"67890abcdef","description":"Customer ID associated with this redemption"}},"required":["id","owner","totalAmountLsEth","maxRedeemableAmountEth","claimableAmountLsEth","claimedAmountEth","claimedAmountLsEth","requestedAt","timestamp","statusClaim","statusSatisfaction","withdrawalEventId","height","customerId"]},"LsEthRedeemProjectionResponse":{"type":"object","properties":{"customerId":{"type":"string","example":"67890abcdef","description":"Customer ID associated with this redemption"},"redeemId":{"type":"number","example":1234,"description":"The redeem request ID"},"estimatedSatisfactionTime":{"type":"string","example":"2024-02-01T10:30:00Z","description":"Estimated time when the redemption will be satisfied"},"estimatedDaysUntilSatisfaction":{"type":"number","example":7,"description":"Estimated number of days until satisfaction"},"isAlreadySatisfied":{"type":"boolean","example":true,"description":"Whether the redemption is already satisfied"},"message":{"type":"string","example":"The redemption is expected to be satisfied in approximately 7 days","description":"Human-readable message about the projection"}},"required":["customerId","redeemId","estimatedSatisfactionTime","estimatedDaysUntilSatisfaction","isAlreadySatisfied","message"]},"LsEthClaimRedeemDto":{"type":"object","properties":{"fromAddress":{"type":"string","example":"0x1234567890123456789012345678901234567890","description":"The address that will send the transaction"},"redeemRequestIds":{"example":[1234,1235],"description":"Array of redeem request IDs to claim","type":"array","items":{"type":"number"}},"withdrawalEventIds":{"example":[456,457],"description":"Array of withdrawal event IDs corresponding to the redeem requests","type":"array","items":{"type":"number"}},"gasEstimateMultiplier":{"type":"number","example":1.2,"description":"Gas estimate multiplier (default: 1.2)"}},"required":["fromAddress","redeemRequestIds","withdrawalEventIds"]},"LsEthWalletTransactionDto":{"type":"object","properties":{"amountEth":{"type":"string","description":"ETH amount involved in the transaction","example":"1.5"},"amountLsEth":{"type":"string","description":"lsETH amount involved in the transaction","example":"1.499"},"conversionRate":{"type":"string","description":"ETH to lsETH conversion rate at time of transaction","example":"1.000879064857666026"},"date":{"type":"string","description":"Transaction date in ISO format","example":"2025-07-29T07:36:36Z"},"finalized":{"type":"boolean","description":"Whether the transaction is finalized","example":true},"transactionHash":{"type":"string","description":"Blockchain transaction hash","example":"0x6911f98fc06e1b834c704f271f234dbeed867d5a745dc0889f7dfd8b79274e3c"},"transactionType":{"type":"string","description":"Type of transaction","example":"DEPOSIT","enum":["DEPOSIT","REDEEM","CLAIM"]}},"required":["amountEth","amountLsEth","conversionRate","date","finalized","transactionHash","transactionType"]},"LsEthWalletTransactionHistoryResponse":{"type":"object","properties":{"transactions":{"description":"List of wallet transactions","type":"array","items":{"$ref":"#/components/schemas/LsEthWalletTransactionDto"}},"nextCursor":{"type":"string","description":"Cursor for next page of results","example":"eyJhZnRlciI6IjIwMjUtMDctMjkifQ=="}},"required":["transactions"]},"LsEthAggregateActivityItem":{"type":"object","properties":{"type":{"type":"string","enum":["TRANSACTION","REDEMPTION"],"description":"Type of activity item"},"date":{"type":"string","description":"Date of the activity in ISO format","example":"2025-07-29T07:36:36Z"},"walletAddress":{"type":"string","description":"Wallet address associated with this activity","example":"0x1234567890123456789012345678901234567890"},"transaction":{"description":"Transaction data (only present when type is TRANSACTION)","allOf":[{"$ref":"#/components/schemas/LsEthWalletTransactionDto"}]},"redemption":{"description":"Redemption data (only present when type is REDEMPTION)","allOf":[{"$ref":"#/components/schemas/LsEthRedeemRequestDto"}]}},"required":["type","date","walletAddress"]},"LsEthAggregateActivityResponse":{"type":"object","properties":{"activities":{"description":"Array of activity items sorted by date (newest first)","type":"array","items":{"$ref":"#/components/schemas/LsEthAggregateActivityItem"}},"totalCount":{"type":"number","description":"Total number of activity items","example":25}},"required":["activities","totalCount"]},"LsEthRedeemManagerInfoResponse":{"type":"object","properties":{"totalAmountRedeemQueueLsEth":{"type":"number","description":"The cumulative sum of the redeem request heights","example":1000},"totalAmountWithdrawalStackLsEth":{"type":"number","description":"The cumulative sum of the withdrawal event heights","example":500}},"required":["totalAmountRedeemQueueLsEth","totalAmountWithdrawalStackLsEth"]}}}}