{"info":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","description":"<html><head></head><body><h2 id=\"this-documentation-is-deprecated-and-should-not-be-used-as-reference-current-documentation-is-located-under-docstwinstakeio\">This documentation is deprecated and should not be used as reference! Current documentation is located under: <a href=\"https://docs.twinstake.io\">docs.twinstake.io</a></h2>\n<hr>\n<p>Twinstake is a leading institutional staking provider which offers unrivaled knowledge and experience of the institutional market from our founding heritage coupled with deep crypto expertise and technology.</p>\n<p>The Twinstake API offers access to reporting information and the ability to stake and delegate for all supported blockchains.</p>\n<h3 id=\"authentication\">Authentication</h3>\n<p>As part of the onboarding process, your required access levels will be discussed. The Twinstake team will then provide you with AWS Cognito credentials at the access level/s which you require. From these credentials you will be able to obtain an authorisation token which is valid for <strong>1 hour</strong>. Your integration should add this token to each request in the request header for these endpoints.</p>\n<p>Please note that you will require separate credentials for testnet and mainnet activity.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"28821580","collectionId":"f832e69c-1967-4832-a03d-d2d7293550fc","publishedId":"2sA2rB1Nw6","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-01-30T08:58:41.000Z"},"item":[{"name":"Overview of the API","item":[{"name":"Generate bearer token","id":"a61a2ed8-56bf-4133-984c-ec3cfa19e2e1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"testuser\",\n    \"password\": \"test123\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/auth/login","description":"<p>This endpoint is for creating the bearer token required to successfully call the API. Please note that if MFA is set up for the user, then there will be a null result in the authentication_result section, and a challenge_name and session which must be input within the <code>POST/v2/auth/mfa</code> endpoint.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>username: The Cognito username associated with the credentials being used, [string], (mandatory)</p>\n</li>\n<li><p>password: The Cognito password associated with the credentials being used, [string]. (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>token</code> is the bearer token to be used for authentication. The expiration of this token is 1 hour. N.B this will be null if the user has MFA set up.</p>\n</li>\n<li><p>where <code>refresh_token</code> is the token which can be used to call the <code>POST/v2/auth/refresh</code> endpoint to generate a new bearer token. The expiration of this refresh_token is 30 days. N.B this will be null if the user has MFA set up.</p>\n</li>\n<li><p>where <code>expires_in</code> is the number of seconds before the token will expire.</p>\n</li>\n<li><p>where <code>token_type</code> will be \"Bearer\" as this is a bearer token</p>\n</li>\n<li><p>where <code>challenge_name</code> will be null if the user does not have MFA set up and will be 'SOTWARE_TOKEN_MFA' if they do.</p>\n</li>\n<li><p>where <code>session</code> will be null if the user does not have MFA set up and will be a session_id otherwise.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","auth","login"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"bfe8a303-1dae-4ab5-9066-601419b95a2b","name":"Provide login details","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"testuser\",\n    \"password\": \"test123\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"authentication_result\": {\n        \"token\": \"TOKEN\",\n        \"refresh_token\": \"REFRESH_TOKEN\",\n        \"expires_in\": 3600,\n        \"token_type\": \"Bearer\"\n    },\n    \"challenge_name\": null,\n    \"session\": null\n}"},{"id":"392e3cb1-ca1c-4f38-a7d7-d20a7081b406","name":"Provide login details (MFA)","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"testuser\",\n    \"password\": \"test123\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/auth/login"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"authentication_result\": {\n        \"token\": null,\n        \"refresh_token\": null,\n        \"expires_in\": null,\n        \"token_type\": null\n    },\n    \"challenge_name\": \"SOFTWARE_TOKEN_MFA or null\",\n    \"session\": \"550e8400-e29b-41d4-a716-44665544000\"\n}"}],"_postman_id":"a61a2ed8-56bf-4133-984c-ec3cfa19e2e1"},{"name":"User MFA for bearer token generation","id":"533c7eff-3698-467a-a53a-8fc1c6a8afc1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"testuser\",\n    \"code\": \"123456\",\n    \"session\": \"550e8400-e29b-41d4-a716-446655440000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/auth/mfa","description":"<p>This endpoint is for creating the bearer token required to successfully call the API where the user has MFA set up. They must first call the <code>POST/v2/auth/mfa</code> endpoint for the session information.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>username: The Cognito username associated with the credentials being used, [string], (mandatory)</p>\n</li>\n<li><p>code: The digits from the MFA result, [integer], (mandatory)</p>\n</li>\n<li><p>session: The session_id as per the response in the <code>POST/v2/auth/login</code> endpoint, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>token</code> is the bearer token to be used for authentication. The expiration of this token is 1 hour. N.B this will be null if the user has MFA set up.</p>\n</li>\n<li><p>where <code>refresh_token</code> is the token which can be used to call the <code>POST/v2/auth/refresh</code> endpoint to generate a new bearer token. The expiration of this refresh_token is 30 days. N.B this will be null if the user has MFA set up.</p>\n</li>\n<li><p>where <code>expires_in</code> is the number of seconds before the token will expire.</p>\n</li>\n<li><p>where <code>token_type</code> will be \"Bearer\" as this is a bearer token</p>\n</li>\n<li><p>where <code>challenge_name</code> will be null since the necessary authentication information in provided within the authentication_result section.</p>\n</li>\n<li><p>where <code>session</code> will be null since the necessary authentication information in provided within the authentication_result section.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","auth","mfa"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a901630a-012b-4c92-9fc2-3002f422045c","name":"Use MFA to generate login details","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"username\": \"testuser\",\n    \"code\": 123456,\n    \"session\": \"550e8400-e29b-41d4-a716-446655440000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/auth/mfa"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"authentication_result\": {\n        \"token\": \"TOKEN\",\n        \"refresh_token\": \"REFRESH_TOKEN\",\n        \"expires_in\": 3600,\n        \"token_type\": \"Bearer\"\n    },\n    \"challenge_name\": null,\n    \"session\": null\n}"}],"_postman_id":"533c7eff-3698-467a-a53a-8fc1c6a8afc1"},{"name":"Refresh bearer token","id":"ac07e1dc-ca85-4073-87cd-3e075d978b80","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"refresh_token\": \"REFRESH_TOKEN\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/auth/refresh","description":"<p>This endpoint is for creating the bearer token required to successfully call the API where the user has MFA set up. They must first call the <code>POST/v2/auth/mfa</code> endpoint for the session information.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>refresh_token: is the value as provided in a previous response from the <code>POST/v2/auth/login</code> or <code>POST/v2/auth/mfa</code> responses. N.B refresh tokens have an expiration of 30 days.</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>token</code> is the bearer token to be used for authentication. The expiration of this token is 1 hour. N.B this will be null if the user has MFA set up.</p>\n</li>\n<li><p>where <code>refresh_token</code> is the token which can be used to call the <code>POST/v2/auth/refresh</code> endpoint to generate a new bearer token. The expiration of this refresh_token is 30 days. N.B this will be null if the user has MFA set up.</p>\n</li>\n<li><p>where <code>expires_in</code> is the number of seconds before the token will expire.</p>\n</li>\n<li><p>where <code>token_type</code> will be \"Bearer\" as this is a bearer token</p>\n</li>\n<li><p>where <code>challenge_name</code> will be null since the necessary authentication information in provided within the authentication_result section.</p>\n</li>\n<li><p>where <code>session</code> will be null since the necessary authentication information in provided within the authentication_result section.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","auth","refresh"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"4f4ce5fe-c1bc-461c-b224-3043de74d6fa","name":"Refresh bearer token","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"refresh_token\": \"REFRESH_TOKEN\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/auth/refresh"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"authentication_result\": {\n        \"token\": \"TOKEN\",\n        \"refresh_token\": \"REFRESH_TOKEN\",\n        \"expires_in\": 3600,\n        \"token_type\": \"Bearer\"\n    },\n    \"challenge_name\": null,\n    \"session\": null\n}"}],"_postman_id":"ac07e1dc-ca85-4073-87cd-3e075d978b80"}],"id":"c91898cc-9a20-4fed-b2c8-1a54cbcc31df","description":"<p><strong>Client Information</strong><br />This endpoint provides information about the entities associated with the access credentials being used to call the API.<br /><em>This endpoint is available for mainnet activity only and will only provide information when delegator addresses have been mapped to the entity filter.</em></p>\n<p><strong>Asset List</strong></p>\n<p>This endpoint provides a list of the assets that Twinstake supports staking and/or reporting information for.</p>\n<p><strong>Protocols</strong></p>\n<ul>\n<li><p>The reporting endpoints provide information about rewards, staked assets and staking transactions. They are intended to be integrated into portfolio management or fund administrator systems. <em>These endpoints are only available for mainnet activity.</em></p>\n</li>\n<li><p>The staking endpoints provide the ability to create a staking or unstaking transaction and monitor it through any associated warm up or cool down period. <em>These endpoints are available for both testnet and mainnet activity.</em></p>\n</li>\n</ul>\n<p><strong>Chains</strong></p>\n<p>Twinstake supports testnet transactions on:  </p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Protocol</th>\n<th>Testnet</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Ethereum</td>\n<td>Hoodi</td>\n</tr>\n<tr>\n<td>Cosmos</td>\n<td>Provider</td>\n</tr>\n<tr>\n<td>Dymnesion</td>\n<td>dYmension</td>\n</tr>\n<tr>\n<td>Celestia</td>\n<td>Mocha</td>\n</tr>\n<tr>\n<td>Injective</td>\n<td>Peggo</td>\n</tr>\n<tr>\n<td>Mantra</td>\n<td>Dukong</td>\n</tr>\n<tr>\n<td>Polygon</td>\n<td>Amoy</td>\n</tr>\n<tr>\n<td>Avalanche</td>\n<td>Fuji</td>\n</tr>\n<tr>\n<td>Peaq</td>\n<td>Agung</td>\n</tr>\n<tr>\n<td>Solana, Near, Aptos, Osmosis</td>\n<td>Testnet</td>\n</tr>\n</tbody>\n</table>\n</div><p>Testnet activity can be to any validators on the testnet. It does not need to be a Twinstake validator.</p>\n<p>Please note that the code examples within these docs can be changed to any language via the top navigation bar \"Language\" option.</p>\n","_postman_id":"c91898cc-9a20-4fed-b2c8-1a54cbcc31df","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Client Information","item":[{"name":"Understand the account structure","id":"169c275d-eabf-485e-8891-d12456185d6c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"/v2/accounts","description":"<p>This endpoint provides information about the accounts associated with the used credentials.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>entity: The full account structure in the format of <code>custodian.client.hierarchy</code> where hierarchy is any subaccount structure which the client wants to use to help them better identify funds</p>\n</li>\n<li><p>address: The address that funds have been delegate to Twinstake from.</p>\n</li>\n<li><p>status:</p>\n<ul>\n<li><p><code>registered</code>: the entity has been added but no funds have yet been staked or delegated to Twinstake from that delegator_address</p>\n</li>\n<li><p><code>delegation_pending</code>: the entity has sent funds to Twinstake associated but they are not yet actively earning rewards e.g they may be within a bonding/warmup or activation queue still</p>\n</li>\n<li><p><code>active</code>: the stakes/delegations associated with the entity are actively earning rewards</p>\n</li>\n<li><p><code>inactive</code>: the entity has unstaked all positions</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>*Please note that information can only be shown here once delegator addresses have been mapped to the entity via speaking with your Customer Success Manager.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","accounts"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"fd50f29b-ae0b-4ef0-a711-b1637a997067","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://api.twinstake.io/v2/accounts"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"ETH\": [\n    {\n      \"entity\": \"<string>\",\n      \"address\": \"<string>\",\n      \"status\": \"<status>\"\n    },\n    {\n      \"entity\": \"<string>\",\n      \"address\": \"<string>\",\n      \"status\": \"<status>\"\n    }\n  ],\n  \"SOL\": [\n    {\n      \"entity\": \"<string>\",\n      \"address\": \"<string>\",\n      \"status\": \"<status>\"\n    },\n    {\n      \"entity\": \"<string>\",\n      \"address\": \"<string>\",\n      \"status\": \"<status>\"\n    }\n  ]\n}"}],"_postman_id":"169c275d-eabf-485e-8891-d12456185d6c"}],"id":"df5bf1b8-0fe6-400b-8aa0-8dcd075df4e1","description":"<p>This read-only endpoint provides information about the entities associated with the access credentials being used to call the API.</p>\n","_postman_id":"df5bf1b8-0fe6-400b-8aa0-8dcd075df4e1","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Asset List","item":[{"name":"Understand what assets can be staked or delegated to","id":"ff0be48e-2ae3-4dda-a2ad-7f1ed48261ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/assets","description":"<p>This endpoint provides a list of assets which can be delegated to Twinstake.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","assets"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"4c447c5f-4bb8-4b0d-b2a5-0995d5ebdda7","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":"/v2/assets"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"assets\": [\n        \"ETH\",\n\t\t\"NEAR\",\n\t\t\"POL\",\n\t\t\"OSMO\",\n\t\t\"APT\",\n\t\t\"ATOM\",\n\t\t\"SOL\",\n\t\t\t...\n  ]\n}"}],"_postman_id":"ff0be48e-2ae3-4dda-a2ad-7f1ed48261ae"}],"id":"b8b46402-0c21-4297-be34-6066757c17f7","description":"<p>This endpoint provides a list of the assets that Twinstake supports staking and/or reporting information for.</p>\n","_postman_id":"b8b46402-0c21-4297-be34-6066757c17f7","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Aptos","item":[{"name":"Validator address","id":"8e7cb088-0029-40ba-8e71-aae2310d6dc7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/APT/validators","description":"<p>This endpoint provides the mainnet Twinstake Aptos validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","APT","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"dea04870-ed6a-4631-b9c3-5be8dfa5cd47","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/APT/validators","host":[""],"path":["v2","staking","APT","validators"],"query":[{"key":"asset","value":"APT","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"0x39b84...46da07b5f\",\n}"}],"_postman_id":"8e7cb088-0029-40ba-8e71-aae2310d6dc7"},{"name":"Rewards","id":"9154e63d-6afc-484f-b75d-d45adbf7062e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/aptos/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Aptos address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Aptos validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","aptos","rewards"],"query":[],"variable":[]}},"response":[{"id":"a3601fb0-632b-4a30-bf8b-2565dc420620","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/aptos/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=0x2db2...458c&validators=0x39b84...46da07b5f","path":["v2","reporting","aptos","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"0x2db2...458c"},{"key":"validators","value":"0x39b84...46da07b5f"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"0x2db2...458c\",\n\t    \"validator\": \"0x39b84...46da07b5f\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 7.2,\n\t    \"apy\": 7.34,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 539.011808\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"9154e63d-6afc-484f-b75d-d45adbf7062e"},{"name":"Stakes","id":"f4d25a39-a0f0-466e-8c93-0cddf2f7e54e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/aptos/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Aptos address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Aptos validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in APT that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","aptos","stakes"],"query":[],"variable":[]}},"response":[{"id":"b23d6064-f15d-40a5-b9a1-79e59939bd88","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/aptos/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=0x2db2...458c","path":["v2","reporting","aptos","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"0x2db2...458c"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"0x2db2...458c\",\n\t    \"validator\": \"0x39b84...46da07b5f\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 1500040,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"f4d25a39-a0f0-466e-8c93-0cddf2f7e54e"},{"name":"Transactions","id":"a016b086-1133-4ae8-8113-13dd30f18e03","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/aptos/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Aptos for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Aptos address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Aptos validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","aptos","transactions"],"query":[],"variable":[]}},"response":[{"id":"53e02f66-cf13-46d8-86cf-a6c977f7c7f7","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/aptos/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","aptos","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"0x2db2...458c\",\n\t    \"validator\": \"0x39b84...46da07b5f\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 1354.43,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"a016b086-1133-4ae8-8113-13dd30f18e03"},{"name":"Rewards (old)","id":"71f48a00-9b46-497a-810b-3d3bc8514630","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"APT\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/aptos/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"c4d7932b-f473-4423-aa63-84bb2218695f","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"APT\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"APT\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"71f48a00-9b46-497a-810b-3d3bc8514630"},{"name":"Staked position (old)","id":"55cf0fc3-0e0c-4792-9755-ceac809ce7bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"APT\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/aptos/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"c8cbd254-63ca-44a9-b8a4-d07714aa39cd","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"APT\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"APT\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"55cf0fc3-0e0c-4792-9755-ceac809ce7bf"},{"name":"Transactions (old)","id":"2b71a44e-2cf8-4a27-8a20-c7836d1bce47","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"APT\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/aptos/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"fd8674a9-6f80-4250-bf42-d340532aa657","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"APT\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"APT\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"203...82\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://explorer.aptoslabs.com/txn/203...82?network=mainnet\"\n            },"}],"_postman_id":"2b71a44e-2cf8-4a27-8a20-c7836d1bce47"},{"name":"Delegate","id":"7cdce16c-d930-4187-a4ad-794f515b5692","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation from the delegator account to the Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount of APT which will be delegated [number], (mandatory). N.B the minimum delegation is 10m APT and the maximum is 50m APT.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","aptos","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"d18bec0a-5573-492c-b41d-442db6c10283","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/delegate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    }\n}"}],"_postman_id":"7cdce16c-d930-4187-a4ad-794f515b5692"},{"name":"Unlock","id":"c69f8e4b-743e-42f6-a4f0-02bef0afc666","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/unlock","description":"<p>This endpoint is to create an unsigned unlock transaction that can be broadcast to ensure that the funds are withdrawable when the current lockup period ends. Funds must then be withdrawn through the /withdraw endpoint.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount of APT which will be unlocked [number], (mandatory).</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","aptos","unlock"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"058bdc6b-9928-4e6d-b819-0dd1cc17792a","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/unlock"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"c69f8e4b-743e-42f6-a4f0-02bef0afc666"},{"name":"Withdrawal","id":"062b2ea9-9e8e-4161-a4a8-0567769b6e4a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/withdraw","description":"<p>This endpoint is to create an unsigned withdraw transaction that can be broadcast to effect the withdrawal of unlocked funds back to the delegator's account. Funds do not need to be unlocked via the /unlock endpoint and will be automatically withdrawable when the lockup period ends.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds have been delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount of APT which will be withdrawn [number], (mandatory).</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","aptos","withdraw"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"c502c190-5f63-4858-98c7-e60b71700832","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/withdraw"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"062b2ea9-9e8e-4161-a4a8-0567769b6e4a"},{"name":"Reactivate","id":"7a2003bf-3fc4-449f-b538-2cf31353917e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/reactivate","description":"<p>This endpoint is to create an unsigned reactivation transaction that can be broadcast to effect the reactivation of the delegated funds into a new lockup period.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount of APT which will be delegated [number], (mandatory). N.B the minimum delegation is 10m APT and the maximum is 50m APT.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","aptos","reactivate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"71340071-57ff-4849-8d05-549fb385813a","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/reactivate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"7a2003bf-3fc4-449f-b538-2cf31353917e"},{"name":"Broadcast transaction","id":"6ac0ee56-8203-4f09-868e-f7394e86efbe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Aptos blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction, [string], (mandatory)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: The signature or signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","aptos","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"fbe627a6-50d7-46aa-9ddf-2603c8e81ac7","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction_hash\": \"<string>\",\n  \"status\": \"broadcasted\",\n  \"message\": \"<string>\"\n}"},{"id":"4d0fbb64-0184-4e9a-a6c4-60ba1f8817ae","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/aptos/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"6ac0ee56-8203-4f09-868e-f7394e86efbe"},{"name":"Transaction status","id":"409d586d-1be5-40d7-a355-e5965bd0f93b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/APT/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","APT","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"7b133add-dac1-4a02-9e0f-3ad2ea641a7f","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/APT/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","APT","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"409d586d-1be5-40d7-a355-e5965bd0f93b"}],"id":"b4094923-deb2-4a68-890c-25ef5db99a98","description":"<p>Staking and Reporting endpoints for APT on the Aptos blockchain</p>\n","_postman_id":"b4094923-deb2-4a68-890c-25ef5db99a98","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Avalanche","item":[{"name":"Validator address","id":"8b3bff77-5af7-447e-8d59-a84b68f47218","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/AVAX/validators","description":"<p>This endpoint provides the mainnet Twinstake Avalanche validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","AVAX","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"3e11323c-02fc-476a-bb2f-972e755b23b3","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/AVAX/validators","host":[""],"path":["v2","staking","AVAX","validators"],"query":[{"key":"asset","value":"AVAX","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"NodeID-...F5ES\",\n}"}],"_postman_id":"8b3bff77-5af7-447e-8d59-a84b68f47218"},{"name":"Rewards","id":"466c4ef0-2e11-47ee-89af-1cf2a1d2acba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/avalanche/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Avalanche address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Avalanche validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","avalanche","rewards"],"query":[],"variable":[]}},"response":[{"id":"8e18eb39-4819-4325-8d7b-9004411cd2aa","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/avalanche/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=GoeW4...DK9&validators=HN7cA...YWrH","path":["v2","reporting","avalanche","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"GoeW4...DK9"},{"key":"validators","value":"HN7cA...YWrH"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"GoeW4...DK9\",\n\t    \"validator\": \"HN7cA...YWrH\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 7.24,\n\t    \"apy\": 7.54,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 657.021308\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"466c4ef0-2e11-47ee-89af-1cf2a1d2acba"},{"name":"Stakes","id":"8ecf34fe-298c-413b-8399-fbb2122b1d7e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/avalanche/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Avalanche address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Avalanche validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in AVAX that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","avalanche","stakes"],"query":[],"variable":[]}},"response":[{"id":"80f2b856-b0d4-4f23-ac81-3ec0c23f07b8","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/avalanche/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=0x123...XYZ","path":["v2","reporting","avalanche","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"0x123...XYZ"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"0x123...XYZ\",\n\t    \"validator\": \"0x39b84...da07b5f\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 1028773,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"8ecf34fe-298c-413b-8399-fbb2122b1d7e"},{"name":"Transactions","id":"7376dd90-8cac-43a8-a601-bf71df1131a3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/avalanche/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Avalanche for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Avalanche address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Avalanche validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","avalanche","transactions"],"query":[],"variable":[]}},"response":[{"id":"c96ffca7-7971-484a-bf0a-2c7abe7d056b","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/avalanche/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","avalanche","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"0x2db2...458c\",\n\t    \"validator\": \"0x39b84...da07b5f\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 8102.33,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"7376dd90-8cac-43a8-a601-bf71df1131a3"},{"name":"Rewards (old)","id":"2a3fe34a-558a-4af5-b100-591c6621f2bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"AVAX\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/avalanche/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"20ce5561-653c-4ad4-b18e-1fdaace4d020","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"AVAX\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"AVAX\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"2a3fe34a-558a-4af5-b100-591c6621f2bd"},{"name":"Staked position (old)","id":"49bc5adc-67fa-4b9e-a9dd-7683ed91a4d3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"AVAX\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/avalanche/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"4f498b0b-68ae-47cc-a9f3-ffddd4c43839","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"AVAX\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"AVAX\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"49bc5adc-67fa-4b9e-a9dd-7683ed91a4d3"},{"name":"Transactions (old)","id":"3d7d87cd-ccc3-46c4-9c36-9b3bfde8febb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"AVAX\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/avalanche/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a4f13c6c-f768-43ab-97e7-04256f4bd51c","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"AVAX\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"AVAX\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"0x30ef...587fff\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://avascan.info/blockchain/c/tx/0x30ef...587fff\"\n            },"}],"_postman_id":"3d7d87cd-ccc3-46c4-9c36-9b3bfde8febb"},{"name":"Delegate","id":"4967666a-e332-48a3-be5b-691545e4f885","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"300000\"\n  \"start_time\": 1230986096, \n  \"end_time\":  1231026307\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/avalanche/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation from the delegator account to the Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto address which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (madatory)</p>\n</li>\n<li><p>amount: The amount of AVAX which will be delegated [number], (mandatory). N.B the minimum delegation is 2,000 AVAX.</p>\n</li>\n<li><p>start_time: The beginning of the stake duration in unix timestamp format, [integer], (mandatory)</p>\n</li>\n<li><p>end_time: The end of the stake duration in unix timestamp format, [integer], (mandatory)</p>\n</li>\n</ul>\n<p>n.b the minimum stake duration on Avalanche is 2 weeks and the maximum is 1 year.</p>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n<li><p>where the <code>signers_addresses</code> is the list of addresses which can sign the transaction for broadcasting</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","avalanche","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"6208e356-1b3f-4363-822a-ba73cf945dde","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0x2db2...458c\",\n  \"validator_address\": \"0x39b84...da07b5f\",\n  \"amount\": \"300000\"\n  \"start_time\": 1230986096, \n  \"end_time\":  1231026307\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/avalanche/delegate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"signers_addresses\": [\n      [\n        \"<string>\",\n        \"<string>\"\n      ],\n      [\n        \"<string>\",\n        \"<string>\"\n      ]\n    ],\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"4967666a-e332-48a3-be5b-691545e4f885"},{"name":"Broadcast transaction","id":"4052026d-2963-4a72-a79f-bf6571dc3bae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/avalanche/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Avalanche blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>signed_transaction: The signed version of the transaction, [string]</li>\n</ul>\n<p>or</p>\n<ul>\n<li><p>unsigned_transaction; The unsigned version of the transaction, [string]</p>\n</li>\n<li><p>signatures; The list of signatures for the signer_addresses.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","avalanche","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a0841208-3209-4dd8-95f7-47ab5051e104","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/avalanche/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction_hash\": \"<string>\",\n  \"message\": \"<string>\"\n}"},{"id":"c2663119-7e50-490c-be5c-b7cef36f21a3","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/avalanche/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"4052026d-2963-4a72-a79f-bf6571dc3bae"},{"name":"Transaction status","id":"ce7995ed-7a66-4662-8993-9ec14c0d7a68","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/AVAX/status","description":"<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:  </p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:  </p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","AVAX","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"0486204e-845e-4e0f-8773-28c9fc39e4d2","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"AVAX\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"/v2/staking/AVAX/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","AVAX","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"ce7995ed-7a66-4662-8993-9ec14c0d7a68"}],"id":"61443b90-3752-4a43-9b3b-d894050ff3d2","description":"<p>Staking and Reporting endpoints for AVAX on the Avalanche blockchain</p>\n","_postman_id":"61443b90-3752-4a43-9b3b-d894050ff3d2","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Celestia","item":[{"name":"Validator address","id":"51e3a92f-0b40-4b19-a72e-c119cc309c77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/TIA/validators","description":"<p>This endpoint provides the mainnet Twinstake Celestia validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","TIA","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"af990aec-01c1-49a0-adc3-77abfc079bfa","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/TIA/validators","host":[""],"path":["v2","staking","TIA","validators"],"query":[{"key":"asset","value":"TIA","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"celestiaval...dfhz78j\",\n}"}],"_postman_id":"51e3a92f-0b40-4b19-a72e-c119cc309c77"},{"name":"Rewards","id":"51618961-f271-4445-b960-1bd70e312dd7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/celestia/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Celestia address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Celestia validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","celestia","rewards"],"query":[],"variable":[]}},"response":[{"id":"a81e7d61-f95e-4674-8945-dd871fd02a46","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/celestia/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=celestia160...kzza6c29&validators=celestiavaloper1mhu...dfhz78j","path":["v2","reporting","celestia","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"celestia160...kzza6c29"},{"key":"validators","value":"celestiavaloper1mhu...dfhz78j"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"celestia160...kzza6c29\",\n\t    \"validator\": \"celestiavaloper1mhu...dfhz78j\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 11.92,\n\t    \"apy\": 11.99,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 839.837410\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"51618961-f271-4445-b960-1bd70e312dd7"},{"name":"Stakes","id":"e5c1438a-3c99-4da7-a8b2-3053c221f775","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/celestia/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Celestia address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Celestia validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in TIA that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","celestia","stakes"],"query":[],"variable":[]}},"response":[{"id":"db36f138-716b-47d8-b27a-2762056b20d2","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/celestia/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=celestia160...kzza6c29","path":["v2","reporting","celestia","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"celestia160...kzza6c29"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"celestia160...kzza6c29\",\n\t    \"validator\": \"celestiavaloper1mhu...dfhz78j\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 7188201,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"e5c1438a-3c99-4da7-a8b2-3053c221f775"},{"name":"Transactions","id":"07975ffd-f9ed-4df4-99ee-af6608fc5e6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/celestia/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Celestia for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Celestia address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Celestia validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","celestia","transactions"],"query":[],"variable":[]}},"response":[{"id":"f79d5f8a-c17e-41c1-84bf-62d8e876f9c0","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/celestia/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","celestia","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"celestia160...kzza6c29\",\n\t    \"validator\": \"celestiavaloper1mhu...dfhz78j\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 7102.55,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"07975ffd-f9ed-4df4-99ee-af6608fc5e6a"},{"name":"Rewards (old)","id":"51a2407b-bb92-40ac-962f-9f53f6768f05","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"TIA\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/celestia/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"3c3db45d-e1d4-4ab3-aee0-ec8d0b099fcd","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"TIA\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"TIA\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"51a2407b-bb92-40ac-962f-9f53f6768f05"},{"name":"Staked position (old)","id":"b7c0a5fb-cb53-4f59-ba5a-7a67af002062","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"TIA\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/celestia/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"ff59e40b-cad9-4c93-83e3-0d690531bafe","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": null,\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"TIA\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"b7c0a5fb-cb53-4f59-ba5a-7a67af002062"},{"name":"Transactions (old)","id":"ff2acaa0-03d6-4390-b873-aca66bbf8888","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"TIA\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/celestia/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"e62a1465-a53a-46da-b442-46a317f9e798","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"TIA\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"TIA\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"EF088060...7E562D\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://celestia.explorers.guru/transaction/EF08806...E562D?height=2993050\"\n            },"}],"_postman_id":"ff2acaa0-03d6-4390-b873-aca66bbf8888"},{"name":"Delegate","id":"bbf7806a-f5fb-4e65-93b0-39043d23d64f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/celestia/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation of assets to a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (mandatory). There is no minimum delegation amount on Celestia.</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (optional). N.B this is required for an address with no transaction history.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","celestia","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a56adc9e-c934-402b-8fb7-e1060482100e","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"bbf7806a-f5fb-4e65-93b0-39043d23d64f"},{"name":"Claim rewards","id":"da26106a-96a5-495a-8286-fb22baabab94","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/celestia/rewards/claim","description":"<p>This endpoint is to claim the rewards from the Twinstake validator, for a given delegator address.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","celestia","rewards","claim"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"7c6b7efa-f007-48eb-8432-8beba3a5688c","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"da26106a-96a5-495a-8286-fb22baabab94"},{"name":"Undelegate","id":"8652fd95-c66a-4164-8d74-28ed4ee675ac","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/celestia/undelegate","description":"<p>This endpoint is to create an unsigned undelegation transaction that can be broadcast to effect the undelegation of assets from a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (optional)</p>\n</li>\n<li><p>unstake_all: This allows the full amount to be undelegated without this being specifided, [boolean], (optional)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","celestia","undelegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"e9947ad5-bdc6-4ca5-8662-72513f3f596a","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/{celestia}/undelegate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"8652fd95-c66a-4164-8d74-28ed4ee675ac"},{"name":"Broadcast transaction","id":"ecbef413-1933-4aa2-a747-880698d57c3a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/celestia/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Celestia blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction, [string], (optional)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: The signature or signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","celestia","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"706bc74a-7f9b-40f1-a11b-0d6443795621","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/celestia/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"3e295516-b1e5-46e7-95f0-4bf591cbff82","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/celestia/broadcast"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"ecbef413-1933-4aa2-a747-880698d57c3a"},{"name":"Transaction status","id":"6e1b28e7-18b5-4ee5-96a9-3d10eb9bff4d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/TIA/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","TIA","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"4ff5edd7-93d1-4fec-8a97-6d572df91ab8","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":{"raw":"/v2/staking/TIA/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","TIA","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"6e1b28e7-18b5-4ee5-96a9-3d10eb9bff4d"}],"id":"8e80ab05-7315-4b25-9ea7-fec0cfc8da47","description":"<p>Staking and Reporting endpoints for TIA on the Celestia blockchain</p>\n","_postman_id":"8e80ab05-7315-4b25-9ea7-fec0cfc8da47","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Cosmos","item":[{"name":"Validator address","id":"69f1a13f-bfe6-40e0-b002-a989e28cb210","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ATOM/validators","description":"<p>This endpoint provides the mainnet Twinstake Cosmos validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ATOM","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"4e652397-71cc-456e-8983-918b9584628b","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/ATOM/validators","host":[""],"path":["v2","staking","ATOM","validators"],"query":[{"key":"asset","value":"NEAR","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"twinstake.poolv1.near\",\n}"}],"_postman_id":"69f1a13f-bfe6-40e0-b002-a989e28cb210"},{"name":"Rewards","id":"71713d29-f085-4ff7-900e-48e8fcc16a8c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/cosmos/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Cosmos address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Cosmos validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of reward not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","cosmos","rewards"],"query":[],"variable":[]}},"response":[{"id":"6adaadad-dd25-4e6b-923c-549609e961ef","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/cosmos/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=cosmos10snj...u4eg&validators=cosmosvaloper1rczr...cq67","path":["v2","reporting","cosmos","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"cosmos10snj...u4eg"},{"key":"validators","value":"cosmosvaloper1rczr...cq67"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"cosmos10snj...u4eg\",\n\t    \"validator\": \"cosmosvaloper1rczr...cq67\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 21.18,\n\t    \"apy\": 22.09,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 738.182038\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"71713d29-f085-4ff7-900e-48e8fcc16a8c"},{"name":"Stakes","id":"260caf67-b318-45e6-afd1-05bba4109c43","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/cosmos/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Cosmos address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Cosmos validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in ATOM that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","cosmos","stakes"],"query":[],"variable":[]}},"response":[{"id":"a897f430-5157-44f5-84d6-7eb777472624","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/cosmos/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=cosmos10snj...u4eg","path":["v2","reporting","cosmos","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"cosmos10snj...u4eg"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"cosmos10snj...u4eg\",\n\t    \"validator\": \"cosmosvaloper1rczr...cq67\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 2733801,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"260caf67-b318-45e6-afd1-05bba4109c43"},{"name":"Transactions","id":"0655ac29-2f9a-4b7b-885d-21b820a96c40","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/cosmos/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Cosmos for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Cosmos address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Cosmos validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","cosmos","transactions"],"query":[],"variable":[]}},"response":[{"id":"b35eea06-1d51-4cc9-a5b8-5762afc62b3d","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/cosmos/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","cosmos","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"cosmos10snj...u4eg\",\n\t    \"validator\": \"cosmosvaloper1rczr...cq67\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 5504.14,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"0655ac29-2f9a-4b7b-885d-21b820a96c40"},{"name":"Rewards (old)","id":"f3a1b20d-06e3-4eca-96d8-0345aa9a22e5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"ATOM\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/cosmos/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"41f9d80f-81f8-43aa-9ce7-7a7aeddacc63","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ATOM\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\t\t\"ATOM\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"f3a1b20d-06e3-4eca-96d8-0345aa9a22e5"},{"name":"Staked position (old)","id":"7c8b1dde-f474-4bdf-a625-f5546ec7b988","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ATOM\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/cosmos/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"38b12aef-ca00-48c7-89d1-7b680c8d3ca7","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ATOM\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"ATOM\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"7c8b1dde-f474-4bdf-a625-f5546ec7b988"},{"name":"Transactions (old)","id":"11ca9ead-cf18-4fe3-ba2e-ab3f833f1b23","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"ATOM\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/cosmos/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"9ce67279-bf7a-4cc5-b101-f727fd183bab","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ATOM\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"ATOM\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"9686FCA...6B073F\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://www.mintscan.io/cosmos/tx/9686FCA...073F?height=23479133\"\n            },"}],"_postman_id":"11ca9ead-cf18-4fe3-ba2e-ab3f833f1b23"},{"name":"Delegate","id":"2a90258c-73e5-4d3e-bd88-22bc553c67c6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"cosmos10snj...u4eg\",\n  \"validator_address\": \"cosmosvaloper1rczr...cq67\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/cosmos/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation of assets to a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (mandatory). There is no minimum delegation amount on Cosmos.</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (optional). N.B this is required for an address with no transaction history.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","cosmos","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"c6cc9559-b40a-46bf-a951-f7c1bfa11c0b","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"cosmos10snj...u4eg\",\n  \"validator_address\": \"cosmosvaloper1rczr...cq67\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"2a90258c-73e5-4d3e-bd88-22bc553c67c6"},{"name":"Claim rewards","id":"b15b37dd-33d4-447a-8b65-a42584034676","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"cosmos10snj...u4eg\",\n  \"validator_address\": \"cosmosvaloper1rczr...cq67\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/cosmos/rewards/claim","description":"<p>This endpoint is to claim the rewards from the Twinstake validator, for a given delegator address.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","cosmos","rewards","claim"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"1caca381-2362-48b7-83d8-f182b7adb75f","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"cosmos1rczr...cq67\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"b15b37dd-33d4-447a-8b65-a42584034676"},{"name":"Undelegate","id":"1fc707fa-1e72-4525-9b49-a742920acd28","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"cosmos10snj...u4eg\",\n  \"validator_address\": \"cosmosvaloper1rczr...cq67\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/cosmos/undelegate","description":"<p>This endpoint is to create an unsigned undelegation transaction that can be broadcast to effect the undelegation of assets from a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (optional)</p>\n</li>\n<li><p>unstake_all: This allows the full amount to be undelegated without this being specifided, [boolean], (optional)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","cosmos","undelegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"56a3d570-0364-46ac-90ca-745b1ec5cac1","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"cosmos1rczr...cq67\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"1fc707fa-1e72-4525-9b49-a742920acd28"},{"name":"Broadcast transaction","id":"a85083b0-9f24-4e13-b672-939d7852332a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/cosmos/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Cosmos blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction, [string], (optional)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: A list of signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","cosmos","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"eab74097-c89f-491b-8ccf-8ba708f90f10","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/{celestia}/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"93a97a14-e009-465d-8dd4-24d90bc42f97","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/cosmos/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"a85083b0-9f24-4e13-b672-939d7852332a"},{"name":"Transaction status","id":"662c9a70-d482-43da-b034-5e619ae5ae36","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ATOM/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ATOM","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"80d2d886-053f-4c90-9d13-048dd7afc207","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/ATOM/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","ATOM","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"662c9a70-d482-43da-b034-5e619ae5ae36"}],"id":"2d831721-d217-454e-ba2e-d05ea3771aa0","description":"<p>Staking and Reporting endpoints for ATOM on the Cosmos blockchain</p>\n","_postman_id":"2d831721-d217-454e-ba2e-d05ea3771aa0","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Dymension","item":[{"name":"Validator address","id":"e0943826-ce86-4d76-bfa4-6b07b74cd6f0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/DYM/validators","description":"<p>This endpoint provides the mainnet Twinstake Dymension validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","DYM","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"56694821-ed93-4e22-9b48-844bddaa92b6","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/DYM/validators","path":["v2","staking","DYM","validators"],"query":[{"key":"asset","value":"DYM","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"dymval...mmq768zs\",\n}"}],"_postman_id":"e0943826-ce86-4d76-bfa4-6b07b74cd6f0"},{"name":"Rewards","id":"3a3451d3-71c2-4a4e-aa92-3d956adbb993","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/dymension/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Dymension address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Dymension validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","dymension","rewards"],"query":[],"variable":[]}},"response":[{"id":"1c8b297a-c7ee-4192-be85-8f538fbe0282","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/dymension/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=dym16dg7s...n3xksl&validators=dymvaloper1t4f...f0mmq768zs","path":["v2","reporting","dymension","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"dym16dg7s...n3xksl"},{"key":"validators","value":"dymvaloper1t4f...f0mmq768zs"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"dym16dg7s...n3xksl\",\n\t    \"validator\": \"dymvaloper1t4f...f0mmq768zs\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 4.98,\n\t    \"apy\": 5.10,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 981.128810\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"3a3451d3-71c2-4a4e-aa92-3d956adbb993"},{"name":"Stakes","id":"9b894e0a-ee45-4f59-837d-870fc6a2b010","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/dymension/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Dymension address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Dymension validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in DYM that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","dymension","stakes"],"query":[],"variable":[]}},"response":[{"id":"1b852257-c7fd-41ba-8ff9-888a9946abb3","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/dymension/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=dym16dg7s...n3xksl","path":["v2","reporting","dymension","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"dym16dg7s...n3xksl"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"dym16dg7s...n3xksl\",\n\t    \"validator\": \"dymvaloper1t4f...f0mmq768zs\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 3771801,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"9b894e0a-ee45-4f59-837d-870fc6a2b010"},{"name":"Transactions","id":"99a38dcd-268a-47e4-8755-4e079ec86aff","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/dymension/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Dymension for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Dymension address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Dymension validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","dymension","transactions"],"query":[],"variable":[]}},"response":[{"id":"fec24145-8721-4924-8f23-9b86dd2f7e63","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/dymension/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","dymension","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"dym16dg7s...n3xksl\",\n\t    \"validator\": \"dymvaloper1t4f...f0mmq768zs\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 1920.10,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"99a38dcd-268a-47e4-8755-4e079ec86aff"},{"name":"Rewards (old)","id":"e7609f57-241f-43b4-ac41-9d42e69040f6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"DYM\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/dymension/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"60b27b4e-caf9-4565-be81-6bb44e0588fd","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"DYM\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"DYM\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"e7609f57-241f-43b4-ac41-9d42e69040f6"},{"name":"Staked position (old)","id":"33ab5740-9cd1-4c30-97f3-7c3afd67de0e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"DYM\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/dymension/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"187db43d-1c68-4080-a303-d9c5729f9258","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"DYM\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"DYM\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"33ab5740-9cd1-4c30-97f3-7c3afd67de0e"},{"name":"Transactions (old)","id":"4fc8e05f-0c99-48cc-b6f0-17925542e28e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"DYM\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/dymension/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"22f8235b-fa14-49cc-ab4b-21abeb725154","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"DYM\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"DYM\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"CBC77BF...9EA1F5\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://dymension.explorers.guru/transaction/CBC77BFBB...height=4752099\"\n            },"}],"_postman_id":"4fc8e05f-0c99-48cc-b6f0-17925542e28e"},{"name":"Delegate","id":"dc261904-1c1e-406c-bfb7-483c7043aa0f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"dym16dg7s...n3xksl\",\n  \"validator_address\": \"dymvaloper1t4f...f0mmq768zs\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/dymension/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation of assets to a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (mandatory). There is no minimum delegation amount on Dymension.</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (optional). N.B this is required for an address with no transaction history.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","dymension","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a9b5add8-f671-4212-b85e-5dee95aad02c","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"dym16dg7s...n3xksl\",\n  \"validator_address\": \"dymvaloper1t4f...f0mmq768zs\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"dc261904-1c1e-406c-bfb7-483c7043aa0f"},{"name":"Claim rewards","id":"f1950650-f5f6-462a-bfcc-6c4e52524008","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"dym16dg7s...n3xksl\",\n  \"validator_address\": \"dymvaloper1t4f...f0mmq768zs\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/dymension/rewards/claim","description":"<p>This endpoint is to claim the rewards from the Twinstake validator, for a given delegator address.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","dymension","rewards","claim"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"c02f8d3d-01d8-42cc-9ac6-6ab197147a74","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"dym16dg7s...n3xksl\",\n  \"validator_address\": \"dymvaloper1t4f...f0mmq768zs\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"f1950650-f5f6-462a-bfcc-6c4e52524008"},{"name":"Undelegate","id":"504fe891-dfa1-48d0-8b50-0ed548b2846f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"dym16dg7s...n3xksl\",\n  \"validator_address\": \"dymvaloper1t4f...f0mmq768zs\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/dymension/undelegate","description":"<p>This endpoint is to create an unsigned undelegation transaction that can be broadcast to effect the undelegation of assets from a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (optional)</p>\n</li>\n<li><p>unstake_all: This allows the full amount to be undelegated without this being specifided, [boolean], (optional)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","dymension","undelegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"ac25adda-0eea-40db-9a20-80aef97ae7ba","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"dym16dg7s...n3xksl\",\n  \"validator_address\": \"dymvaloper1t4f...f0mmq768zs\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"504fe891-dfa1-48d0-8b50-0ed548b2846f"},{"name":"Broadcast transaction","id":"d4a45f6e-6dde-4fc3-9b31-c14501396fff","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/dymension/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Dymension blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction, [string], (optional)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: A list of signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","dymension","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"7e60f62a-6af5-4804-8aed-f6b425f361c3","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/{celestia}/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"d7c39f09-892e-48a5-9070-1ac34c969802","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/dymension/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"d4a45f6e-6dde-4fc3-9b31-c14501396fff"},{"name":"Transaction status","id":"b9ef6c88-7ff3-42ae-a458-17c937501af3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/DYM/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","DYM","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"da6ca5f3-9356-4587-b518-54aabf2c6709","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/DYM/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","DYM","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"b9ef6c88-7ff3-42ae-a458-17c937501af3"}],"id":"50dcd40e-00c3-4b8c-bdbf-3d723a20e9f0","description":"<p>Staking and Reporting endpoints for DYM on the Dymension blockchain</p>\n","_postman_id":"50dcd40e-00c3-4b8c-bdbf-3d723a20e9f0","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Ethereum","item":[{"name":"Ethereum Validator Statuses","item":[{"name":"Retrieve the information for Ethereum validators","id":"4e15786d-54f6-41a1-9bde-81dd529036f0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"/v2/validators/ethereum","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint provides information about a specific validator or set of validators.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>validator_set_uuid: The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators e.g <code>51fd9a34-2a18-11ee-be56-0242ac120002</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p>At least one of the above must be provided</p>\n<ul>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of validators in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a validator_set_uuid or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=1000 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where the metadata provides pagination information for the response</p>\n</li>\n<li><p>where <code>activation_date</code> is the date the validator status became active and it was validating from. If the validator is not yet active then this will be null.</p>\n</li>\n<li><p>where <code>activation_eta</code> is the date time when the validator will become active.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address where funds were sent from.</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>exit_date</code> is the date the validator exited the validation set. If the validator is still active then this will be null.</p>\n</li>\n<li><p>where <code>exit_eta</code> is the date time when the validator will become fully exited. If the validator has not voluntarily requested an exit or been forced to exit then this will be null.</p>\n</li>\n<li><p>where <code>fee_recipient_address</code> is the Ethereum address where all execution level rewards will be sent. <a href=\"https://docs.twinstake.io/#1ced59b5-af63-4291-90f9-709033eaeaad\">https://docs.twinstake.io/#1ced59b5-af63-4291-90f9-709033eaeaad</a></p>\n</li>\n<li><p>where <code>transaction_hash</code> is transaction hash for the deposit transaction.</p>\n</li>\n<li><p>where <code>status</code> is: <strong>PENDING_ACTIVATION</strong>, <strong>ACTIVE,</strong> <strong>PENDING_EXIT</strong> or <strong>INACTIVE</strong></p>\n</li>\n<li><p>where <code>validator_index</code> is the index for the Ethereum validator/s.</p>\n</li>\n<li><p>where the <code>validator_pubkey</code> is the allocated public key for this validator. It is the unique identity of the validator on the consensus layer.</p>\n</li>\n<li><p>where <code>validator_set_uuid</code> is the unique identifier for the set of validators.</p>\n</li>\n<li><p>where <code>withdrawal_address</code> is the Ethereum address where the 32 ETH principal will be returned to as well as all consensus level rewards.</p>\n</li>\n</ul>\n<p>NB for testnet usage the only fields returned will be <code>entity</code>, <code>validator_set_uuid</code>, <code>validator_pubkey</code>, <code>fee_recipient_address</code>, and <code>delegator_address</code>.</p>\n","urlObject":{"path":["v2","validators","ethereum"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators</p>\n","type":"text/plain"},"key":"validator_set_uuid","value":"51fd9a34-2a18-11ee-be56-0242ac120002"},{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The number of pages in the response</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>The number of validators in the response</p>\n","type":"text/plain"},"key":"page_size","value":"500"}],"variable":[]}},"response":[{"id":"087c15d1-7d75-4971-bd13-3418b1e7ce52","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"https://api.twinstake.io/v2/validators/ethereum?validator_set_uuid=0d743e4f-48ab-461b-b021-8b6068359f3b","protocol":"https","host":["api","twinstake","io"],"path":["v2","validators","ethereum"],"query":[{"key":"validator_set_uuid","value":"0d743e4f-48ab-461b-b021-8b6068359f3b"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"metadata\": {\n    \"page\": 5,\n    \"page_size\": 20,\n    \"page_count\": 27,\n    \"total_count\": 521\n  },\n  \"data\": [\n    {\n      \"activation_date\": \"2024-03-21 12:51:11\",\n      \"activation_eta\": null,\n      \"delegator_address\": \"0xb794f5ea0ba39494ce839613fffba74279579268\",\n      \"entity\": \"CustodianA.ClientB\",\n      \"exit_date\": null,\n      \"exit_eta\": null,\n      \"fee_recipient_address\": \"0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5\",\n      \"status\": \"active_ongoing\",\n      \"transaction_hash\": \"0x576ca901b721e1829a029fd5d91fb700bfb243f56002d98f43f0e050b31af3a8\",\n      \"validator_index\": 876543,\n      \"validator_public_key\": \"0x97ed02e1cac90314017b7dcb86b17b7fc01297b51594a8622899da4b2405adbbcf08d7bce2112fbbfb92a481b888d1d8\",\n      \"validator_set_uuid\": \"0d743e4f-48ab-461b-b021-8b6068359f3b\",\n      \"withdrawal_address\": \"0x8C8D7C46219D9205f056f28fee5950aD564d7465\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"4e15786d-54f6-41a1-9bde-81dd529036f0"}],"id":"1ced59b5-af63-4291-90f9-709033eaeaad","description":"<p><code>pending</code></p>\n<ul>\n<li><p>pending_initialized - When the first deposit is still being processed by the protocol to get into the activation queue.</p>\n</li>\n<li><p>pending_queued - When the validator is within the activation queue but not yet actively earning rewards.</p>\n</li>\n</ul>\n<p><code>active</code></p>\n<ul>\n<li><p>active_ongoing - When the validator is actively earning rewards and participating in the protocol's consensus activities. No exit has been initiated.</p>\n</li>\n<li><p>active_exiting - When the validator is actively earning rewards and participating in the protocol's consensus activities, but a voluntary request to exit has been broadcast.</p>\n</li>\n<li><p>active_slashed - When the validator is actively earning rewards and participating in the protocol's consensus activities. However due to activity which is defined under the protocol's slashing conditions, the validator is scheduled for a forced exit.</p>\n</li>\n</ul>\n<p><code>exited</code></p>\n<ul>\n<li><p>exited_unslashed - After a voluntary exit, this is when the validator has reached the required exit epoch and is no longer required to conduct consensus activity. However no withdrawal is yet possible.</p>\n</li>\n<li><p>exited_slashed - After a forced exit, this is when the validator has reached the required exit epoch and is no longer required to conduct consensus activity. However no withdrawal is yet possible.</p>\n</li>\n</ul>\n<p><code>withdrawal</code></p>\n<ul>\n<li><p>withdrawal_possible - When the balance of the validator can be fully withdrawn to the withdrawal address.</p>\n</li>\n<li><p>withdrawal_done - When the balance of the validator has been fully withdrawn to the withdrawal_address.</p>\n</li>\n</ul>\n","_postman_id":"1ced59b5-af63-4291-90f9-709033eaeaad","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Reporting","item":[{"name":"Rewards","id":"3585139b-1107-4fca-955e-7ecd7755ce01","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/ethereum/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Ethereum address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Ethereum validator public key</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegator address and entity</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegator address and entity, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is list of rewards:</p>\n<ul>\n<li><p>where <code>attestation_source_reward</code> is the reward for making a timely vote for the correct source checkpoint for the given day</p>\n</li>\n<li><p>where <code>attestation_target_reward</code> is the reward for making a timely vote for the correct target checkpoint on the given day</p>\n</li>\n<li><p>where <code>attestation_head_reward</code> is the reward for making a timely vote for the correct head block on the given day</p>\n</li>\n<li><p>where <code>proposer_attestation_inclusion_reward</code> is the reward for including attestations from other validators in a block N.B this will be zero unless an associated Ethereum validator has been selected to propose the block during the given day</p>\n</li>\n<li><p>where <code>proposer_sync_inclusion_reward</code> is the reward for including sync committee attestations in a block N.B this will be zero unless an associated validator has been selected to propose the block during the given day</p>\n</li>\n<li><p>where <code>sync_committee_reward</code> is the reward for participating in a sync committee N.B this will be zero unless an associated Ethereum validator was selected for a sync committee on the given day</p>\n</li>\n<li><p>where <code>sync_committee_penalty</code> is the penalty, for all associated Ethereum validators, for not voting in the sync committee when selected on the given day</p>\n</li>\n<li><p>where <code>attestation_source_penalty</code> is the penalty for not attesting to the source checkpoint on the given day</p>\n</li>\n<li><p>where <code>proposer_slashing_inclusion_reward</code> is the reward for including any slashing votes in a block on the given day N.B this will be zero unless an associated Ethereum validator has been selected to propose the block during the given day</p>\n</li>\n<li><p>where <code>attestation_target_penalty</code> is the penalty for not attesting to the target checkpoint on the given day</p>\n</li>\n<li><p>where <code>MEV_Rewards</code> is the total maximal extractable value from transaction fees + priority fees. N.B this will be zero unless an associated Ethereum validator has been selected to propose the block during the given day</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","ethereum","rewards"],"query":[],"variable":[]}},"response":[{"id":"6322e732-d05f-46e4-8293-30c7f19f6189","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"?date_from=2025-06-19&date_to=2025-06-20&delegators=0xb794f...9268&validators=0xcba00...8bab","query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"0xb794f...9268"},{"key":"validators","value":"0xcba00...8bab"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n\t\t\"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"0xb794f...9268\",\n\t    \"validator\": \"0xcba00...8bab\",\n\t    \"entity\": \"CUSTODIAN.CLIENT\",\n\t    \"apr\": 2.99,\n\t    \"apy\": 3.17,\n\t    \"rewards\": {\n\t      \"PROPOSER_SYNC_INCLUSION_REWARD\": 1.195561492,\n\t      \"SYNC_COMMITTEE_REWARD\": 2.621835439,\n\t      \"SYNC_COMMITTEE_PENALTY\": -1.3534534,\n\t      ...\n\t    },\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"3585139b-1107-4fca-955e-7ecd7755ce01"},{"name":"Stakes","id":"98bc9ec0-9e38-412e-a6a8-501b0438dc77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/ethereum/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Ethereum address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Ethereum validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in ETH that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n<li><p>where <code>PENDING_ACTIVATION</code> is the amount in ETH that is being staked to the Twinstake validator and is in the activation queue</p>\n</li>\n<li><p>where <code>PENDING_EXIT</code> is the amount in ETH that is being staked to the Twinstake validator and is in the exit queue</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","ethereum","stakes"],"query":[],"variable":[]}},"response":[{"id":"5ba0c349-cd76-4802-9585-19fe05d5b606","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/ethereum/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=0x123...XYZ","path":["v2","reporting","ethereum","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"0x123...XYZ"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"0x123...XYZ\",\n\t    \"validator\": \"0x789...ABC\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 1102854,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"98bc9ec0-9e38-412e-a6a8-501b0438dc77"},{"name":"Transactions","id":"5ecbefab-0e94-4c37-8384-e48d60dd87dd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/ethereum/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Ethereum address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Ethereum validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","ethereum","transactions"],"query":[],"variable":[]}},"response":[{"id":"48aa3ee8-7f3a-4444-bf11-9f480a7ae604","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/ethereum/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","ethereum","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"0x123...XYZ\",\n\t    \"validator\": \"0x789...ABC\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 1100.50,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"5ecbefab-0e94-4c37-8384-e48d60dd87dd"},{"name":"Transactions (old)","id":"ffc0b323-2c4e-42e5-bea4-5e967a3d0efb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"ETH\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/ethereum/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"84472fbf-812d-410f-b402-76501e2eee92","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ETH\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": null,\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"ETH\": {\n\t\t\t\"entity\":\"CustdianA.ClientB.HierarchyC\",\n\t\t\t\"transaction_hash\":\"0x74dbc63384023d69abe837d63a01bd74a1ef87e59a27226c6427c66c58c1e5a1\",\n\t\t\t\"amount\":640000000000,\n\t\t\t\"type\":\"STAKING\",\n\t\t\t\"datetime\":\"2023-11-17 15:33:59\",\n\t\t\t\"stake_account\":\"0xcba0074a77A3aD623A80492Bb1D8d932C62a8bab\",\n\t\t\t\"explorer_url\":\"https://etherscan.io/tx/0x74dbc63384023d69abe837d63a01bd74a1ef87e59a27226c6427c66c58c1e5a1\"\n\t\t\t}\n}"}],"_postman_id":"ffc0b323-2c4e-42e5-bea4-5e967a3d0efb"},{"name":"Staked position (old)","id":"9dcb910e-1b7c-4add-a307-2bab88c0b819","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ETH\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/ethereum/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"2da166ee-b0aa-4d0d-a022-3966fdf92380","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ETH\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"ETH\": [\n   {\n      \"address\": \"0x1a2b....8y9z\",\n\t\t\t\"date\": \"2023-01-30\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_stake_amount\": 864,\n\t\t\t\"active_validator_count\": 27,\n\t\t\t\"new_deposits\": 64,\n\t\t\t\"pending_activation\": 320,\n\t\t\t\"next_activation_eta\": \"2023-01-31 23:34:29\",\n\t\t\t\"exitied_stake\": 0,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null,\n\t\t\t\t},\n{\n      \"address\": \"0x64g...7dhs\",\n\t\t\t\"date\": \"2023-01-30\",\n\t\t\t\"entity\": \"CustodianA.ClientB....\",\n....\n },"}],"_postman_id":"9dcb910e-1b7c-4add-a307-2bab88c0b819"},{"name":"Rewards (old)","id":"22b6d845-4374-4b49-8142-a7415c35902b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"ETH\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"komainu.komainu\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/ethereum/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day. Where multiple Ethereum validators are being staked to, the reported information is at the aggregated level unless the validator_index param is used in which case the response will provide individual rewards breakdowns per validator index.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>validator_indexes: A single or an array of indexes for Ethereum validators e.g <code>[\"123456\"]</code>, [string], [optional]</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>aggregate_rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>average_apr</code> is the average of APR across all ETH validators associated with the delegator address for that given day.</p>\n</li>\n<li><p>where <code>aggregate_attestation_source_reward</code> is the total reward, for all associated Ethereum validators, for making a timely vote for the correct source checkpoint on the given day.</p>\n</li>\n<li><p>where <code>aggregate_attestation_target_reward</code> is the total reward, for all associated Ethereum validators, for making a timely vote for the correct target checkpoint on the given day.</p>\n</li>\n<li><p>where <code>aggregate_attestation_head_reward</code> is the reward, for all associated Ethereum validators, for making a timely vote for the correct head block on the given day.</p>\n</li>\n<li><p>where <code>aggregate_proposer_attestation_inclusion_reward</code> is the total reward for including attestations from other validators in a block N.B this will be zero unless an associated Ethereum validator has been selected to propose the block during the given day.</p>\n</li>\n<li><p>where <code>aggregate_proposer_sync_inclusion_reward</code> is the total reward for including sync committee attestations in a block N.B this will be zero unless an associated validator has been selected to propose the block during the given day.</p>\n</li>\n<li><p>where <code>aggregate_sync_committee_reward</code> is the total reward for participating in a sync committee. N.B this will be zero unless an associated Ethereum validator was selected for a sync committee on the given day.</p>\n</li>\n<li><p>where <code>aggregate_sync_committee_penalty</code> is the total penalty, for all associated Ethereum validators, for not voting in the sync committee when selected on the given day.</p>\n</li>\n<li><p>where <code>aggregate_attestation_source_penalty</code> is the total penalty, for all associated Ethereum validators, for not attesting to the source checkpoint on the given day.</p>\n</li>\n<li><p>where <code>aggregate_attestation_target_penalty</code> is the total penalty, for all associated Ethereum validators, for not attesting to the target checkpoint on the given day.</p>\n</li>\n<li><p>where <code>aggregate_MEV_Rewards</code> is the total maximal extractable value from transaction fees + priority fees N.B this will be zero unless as associated Ethereum validator has been selected to propose a block on the given day.</p>\n</li>\n<li><p>where <code>average_return_over_day</code> is the average rewards amount as a proportion of the total ETH stake for all associated validators.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"6865ef31-a324-467f-a0ae-c4c29f71a614","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": ETH,\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\"ETH\": [\n        {\n            \"address\": \"0xABC...123\",\n            \"date\": \"2024-10-24\",\n            \"entity\": \"CustodianA.ClientB\",\n            \"active_stake_amount\": 320.0,\n            \"aggregated_rewards_amount\": 0.002079483,\n            \"average_APR\": 0.02371910296875,\n            \"average_APY\": null,\n            \"epoch_ended_on_day\": 320286,\n            \"epoch/checkpoint_start\": \"2024-10-23 23:57:11\",\n            \"epoch/checkpoint_end\": \"2024-10-24 23:56:59\",\n            \"average_return_over_day\": 6.498384375e-05,\n            \"aggregate_attestation_target_penalty\": 0.0,\n            \"aggregate_finality_delay_penalty\": 0.0,\n            \"aggregate_attestation_source_penalty\": 0.0,\n            \"aggregate_sync_committee_reward\": 0.0,\n            \"aggregate_proposer_attestation_inclusion_reward\": 0.0,\n            \"aggregate_sync_committee_penalty\": 0.0,\n            \"aggregate_proposer_slashing_inclustion_reward\": 0.0,\n            \"aggregate_MEV_Rewards\": 0.0,\n            \"aggregate_attestation_target_reward\": 0.001005908,\n            \"aggregate_proposer_sync_inclusion_reward\": 0.0,\n            \"aggregate_attestation_source_reward\": 0.000541667,\n            \"aggregate_attestation_head_reward\": 0.000531908\n        },\n]}\n"},{"id":"1400343f-0a75-40ca-9609-df3054748792","name":"Successful response - validator_indexes","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"ETH\"\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": [\"123456\"]\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\"ETH\": [\n        {\n            \"validator_indexes\": [\"123456\"],\n             \"address\": \"0xABC...123\",\n             \"date\": \"2024-10-24\",\n             \"entity\": \"CustodianA.ClientB\",\n             \"active_stake_amount\": 32.0,\n             \"aggregated_rewards_amount\": 0.002079483,\n             \"average_APR\": 0.02371910296875,\n             \"average_APY\": null,\n             \"epoch_ended_on_day\": 320286,\n             \"epoch/checkpoint_start\": \"2024-10-23 23:57:11\",\n             \"epoch/checkpoint_end\": \"2024-10-24 23:56:59\",\n             \"average_return_over_day\": 6.498384375e-05,\n             \"aggregate_attestation_target_penalty\": 0.0,\n             \"aggregate_finality_delay_penalty\": 0.0,\n             \"aggregate_attestation_source_penalty\": 0.0,\n             \"aggregate_sync_committee_reward\": 0.0,\n             \"aggregate_proposer_attestation_inclusion_reward\": 0.0,\n             \"aggregate_sync_committee_penalty\": 0.0,\n             \"aggregate_proposer_slashing_inclustion_reward\": 0.0,\n             \"aggregate_MEV_Rewards\": 0.0,\n             \"aggregate_attestation_target_reward\": 0.001005908,\n             \"aggregate_proposer_sync_inclusion_reward\": 0.0,\n             \"aggregate_attestation_source_reward\": 0.000541667,\n             \"aggregate_attestation_head_reward\": 0.000531908\n        },\n"}],"_postman_id":"22b6d845-4374-4b49-8142-a7415c35902b"}],"id":"22e9b83e-393d-4d9f-9a57-95ec69812a50","_postman_id":"22e9b83e-393d-4d9f-9a57-95ec69812a50","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Staking","item":[{"name":"Validator address","id":"43ebce46-ef5b-4ecd-9599-fbe615245692","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ethereum/validators","description":"<p>This endpoint provides the mainnet (and where available testnet) Twinstake Ethereum validator addresses that funds have/can be delegated to.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>deposit_id: The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators to be staked together e.g <code>51fd9a34-2a18-11ee-be56-0242ac120002</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>Where <code>address</code> is the address of a Ethereum validator</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators to be staked together</p>\n","type":"text/plain"},"key":"deposit_id","value":"51fd9a34-2a18-11ee-be56-0242ac120002"}],"variable":[]}},"response":[{"id":"4722bb18-4fbc-47e6-b18b-76b403823957","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":"/v2/staking/ethereum/validators"},"code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"address\": \"0xbdf91c36d07a9a47f39ade37537e9ea0afdf403433638b85c5e8cfa317d2c88dd4305e8c61d11177884a03aabed1f084\"\n    },\n    ...\n]"}],"_postman_id":"43ebce46-ef5b-4ecd-9599-fbe615245692"},{"name":"Create deposit data (old)","id":"13701248-01e1-4c9d-82e7-e70d1480ceae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"amount_per_validator\": 32,\n    \"number_of_validators\": 5,\n    \"validator_type\": \"0x01\"\n    \"fee_recipient_address\": \"0x35CD252C22FaFe0527c2f11E68fa6e33Ef94FD09\", \n    \"withdrawal_address\": \"0x9FbE1C1740339d29b119782585CbdfDFe598cE44\",\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/deposit-data","description":"<p>This endpoint generates a deposit data JSON response which can be externally broadcast to stake for one or more validators. The deposit data information is returned asynchronously and accessed through the <code>GET/v2/staking/ethereum/deposit</code> endpoint. Please allow a few minutes between generation through this endpoint and calling the /deposit endpoint.</p>\n<p>This endpoint <em>or</em> the <code>POST/v2/staking/ethereum/deposit-transaction</code> endpoint should be used to generate the information for the initial staking deposit transaction.</p>\n<p>This endpoint should not be used to top up an existing validator. Please use <code>POST/v2/staking/ethereum/validators/top-up</code> instead.</p>\n<p>Please note that this endpoint can only be used to deposit for Twinstake validators.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>amount_per_validator: An integer between 1 and 2048 e.g <code>1</code>, [integer], (optional - set to 32 if not entered). N.B This can be used when doing a multi-part deposit.</p>\n</li>\n<li><p>number_of_validators: A positive integer e.g <code>5</code> , [integer], (mandatory)</p>\n</li>\n<li><p>validator_type: Either the value <code>0x01</code> for a validator which can have a maximum staked balance of 32ETH, or <code>0x02</code> for a validator which can have a maximum staked balance of 2048ETH. If no value is entered here, then the default value will be <code>0x01</code>, [string], (optional)</p>\n</li>\n<li><p>fee_recipient_address: The Ethereum account to receive execution rewards to e.g <code>0x35CD252C22FaFe0527c2f11E68fa6e33Ef94FD09</code> , [string], (mandatory)</p>\n</li>\n<li><p>withdrawal_address: The Ethereum account to receive the 32ETH principal and consensus rewards to e.g <code>0x9FbE1C1740339d29b119782585CbdfDFe598cE44</code> , [string], (mandatory)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>validator_set_uuid</code> is the UUID for the set of validators.</p>\n</li>\n<li><p>where <code>location</code> provides a URL at which progress can be checked for an eventual result.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","deposit-data"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a8c996f0-541a-453c-8cb6-f67b4c21a8d2","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"amount_per_validator\": 32,\n    \"number_of_validators\": 5,\n    \"validator_type\": \"0x01\"\n    \"fee_recipient_address\": \"0x35CD252C22FaFe0527c2f11E68fa6e33Ef94FD09\", \n    \"withdrawal_address\": \"0x9FbE1C1740339d29b119782585CbdfDFe598cE44\",\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/deposit-data"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n\t\"location\": \"/v2/staking/eth/deposit/e9d38d8e-db24-41d8-9de5-50adefb225aa\"\n\t\"validator_set_uuid\": \"e9d38d8e-db24-41d8-9de5-50adefb225aa\"\n}"}],"_postman_id":"13701248-01e1-4c9d-82e7-e70d1480ceae"},{"name":"Create deposit transaction (old)","id":"f7a3ee1a-8324-43f0-a5ac-7bf0c86addac","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"amount_per_validator\": 32,\n    \"number_of_validators\": 10,\n    \"validator_type\": \"0x01\",\n    \"fee_recipient_address\": \"0x15719Ed09527Ea71503Dc706d621278B17563750\", \n    \"withdrawal_address\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n    \"entity_filter\": \"CustodianA.ClientB\",\n    \"batch\": true\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/deposit-transaction","description":"<p>This endpoint generates a deposit transaction response which can be externally broadcast to stake for one or more validators. The deposit transaction information is returned asynchronously and accessed through the <code>GET/v2/staking/ethereum/deposit</code> endpoint. Please allow a few minutes between generation through this endpoint and calling the /deposit endpoint.</p>\n<p>This endpoint <em>or</em> the <code>POST/v2/staking/ethereum/deposit-data</code> endpoint should be used to generate the information for the initial staking deposit transaction.</p>\n<p>This endpoint should not be used to top up an existing validator. Please use <code>POST/v2/staking/ethereum/validators/top-up</code> instead.</p>\n<p>Please note that this endpoint can only be used to deposit for Twinstake validators.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>amount_per_validator: An integer between 1 and 2048 e.g 1, [integer], (optional - set to 32 if not entered). N.B This can be used when doing a multi-part deposit.</p>\n</li>\n<li><p>number_of_validators: A positive integer e.g <code>10</code> , [integer], (mandatory)</p>\n</li>\n<li><p>validator_type: Either the value 0x01 for a validator which can have a maximum staked balance of 32ETH, or 0x02 for a validator which can have a maximum staked balance of 2048ETH. If no value is entered here, then the default value will be 0x01, [string], (optional)</p>\n</li>\n<li><p>fee_recipient_address: The Ethereum account to receive execution rewards to e.g <code>0x15719Ed09527Ea71503Dc706d621278B17563750</code> , [string], (mandatory)</p>\n</li>\n<li><p>withdrawal_address: The Ethereum account to receive the 32ETH principal and consensus rewards to e.g <code>0xdAC17F958D2ee523a2206206994597C13D831ec7</code> , [string], (mandatory)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>batch: Whether the Twinstake batch deposit contract is to be used e.g true, [boolean], (mandatory). This is compatible with Hoodi and mainnet activity and for both 0x01 and 0x02 validator types.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>validator_set_uuid</code> is the UUID for the set of validators.</p>\n</li>\n<li><p>where <code>location</code> provides a URL at which progress can be checked for an eventual result.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","deposit-transaction"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"3018b706-c2ca-4174-96f7-ed5672134783","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"    \"amount_per_validator\": 32,\n    \"number_of_validators\": 10,\n    \"validator_type\": \"0x01\",\n    \"fee_recipient_address\": \"0x15719Ed09527Ea71503Dc706d621278B17563750\", \n    \"withdrawal_address\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n    \"entity_filter\": \"CustodianA.ClientB\",\n    \"batch\": true\n}'","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/deposit-transaction"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"location\": \"/v1/staking/eth/deposit/e9d38d8e-db24-41d8-9de5-50adefb225aa\"\n    \"validator_set_uuid\": \"e9d38d8e-db24-41d8-9de5-50adefb225aa\"\n}"}],"_postman_id":"f7a3ee1a-8324-43f0-a5ac-7bf0c86addac"},{"name":"Create deposit","id":"556c48d0-6a70-434b-8b69-38bd70fd3c0b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n   \"amount_per_validator\": 320,\n   \"number_of_validators\": 5,\n   \"validator_type\": \"0x01\",\n   \"fee_recipient_address\": \"0x35CD252C22FaFe0527c2f11E68fa6e33Ef94FD09\", \n   \"withdrawal_address\": \"0x9FbE1C1740339d29b119782585CbdfDFe598cE44\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/deposit","description":"<p>This endpoint generates deposit information for activating a new Ethereum validator/s. This can be accessed via the GET/v2/staking/ethereum/deposit endpoint. Please allow a few minutes between generation through this endpoint and calling the GET/deposit endpoint.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>amount_per_validator: An integer between 1 and 2048 e.g <code>1</code>, [integer], (optional - set to 32 if not entered). N.B This can be used when doing a multi-part deposit.</p>\n</li>\n<li><p>number_of_validators: A positive integer e.g <code>5</code> , [integer], (mandatory)</p>\n</li>\n<li><p>validator_type: Either the value <code>0x01</code> for a validator which can have a maximum staked balance of 32ETH, or <code>0x02</code> for a validator which can have a maximum staked balance of 2048ETH. If no value is entered here, then the default value will be <code>0x01</code>, [string], (optional)</p>\n</li>\n<li><p>fee_recipient_address: The Ethereum account to receive execution rewards to e.g <code>0x35CD252C22FaFe0527c2f11E68fa6e33Ef94FD09</code> , [string], (mandatory)</p>\n</li>\n<li><p>withdrawal_address: The Ethereum account to receive the 32ETH principal and consensus rewards to e.g <code>0x9FbE1C1740339d29b119782585CbdfDFe598cE44</code> , [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>deposit_id</code> is the ID for the set of validators that the deposit information is generated for.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","deposit"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"1d4067c1-059b-49fe-8289-8b65fc20217a","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":"/v2/staking/ethereum/deposit"},"code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n   \t\"deposit_id\": \"e9d38d8e-db24-41d8-9de5-50adefb225aa\"\n}"}],"_postman_id":"556c48d0-6a70-434b-8b69-38bd70fd3c0b"},{"name":"Deposit transaction","id":"3c6940b7-be72-47e5-aef8-9b6fe382b6d2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ethereum/deposit","description":"<p>This endpoint provides the deposit information as generated by <code>POST/v2/staking/ethereum/deposit-data</code> , <code>POST/v2/staking/ethereum/deposit-transaction</code> or <code>POST/v2/staking/ethereum/deposit</code> . Please allow a few minutes between generation through these endpoints and calling this endpoint - with longer wait times needed for more validators being deposited to. You may need to retry the request if you receive a 204 response.</p>\n<p>The result of this endpoint can then be broadcast through our broadcast endpoint, <code>v2/staking/ethereum/broadcast</code>, or by using a 3rd party such as a preferred custodian or wallet provider in order to make the staking deposit.</p>\n<p><strong>Query Parameter</strong></p>\n<ul>\n<li><p>validator_set_uuid: The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators to be staked together e.g <code>51fd9a34-2a18-11ee-be56-0242ac120002</code> , [string], (optional)</p>\n</li>\n<li><p>id: the unique identifier as provided in the response of /deposit and representing one or multiple validators to be staked together e.g. <code>51fd9a34-2a18-11ee-be56-0242ac120002</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>N.B. one of either <code>id</code> or <code>validator_set_uuid</code> must be used</p>\n<ul>\n<li><p>type: the format that the deposit response should be provided in, in the format of DATA, TRANSACTION, or BATCH_TRANSACTION, [string], (optional)</p>\n<ul>\n<li>N.B. <code>type</code> is only relevant for deposits as generated through the <code>POST/deposit</code> endpoint</li>\n</ul>\n</li>\n<li><p>delegator_address: the address of the delegator for TRANSACTION and BATCH_TRANSACTION type [string], (optional)</p>\n<ul>\n<li>N.B. <code>delegator_address</code> is only relevant for deposits as generated through the <code>POST/deposit</code> endpoint</li>\n</ul>\n</li>\n</ul>\n<p><strong>Response Body (for a /deposit-data call)</strong></p>\n<p>N.B where the <code>amount_per_validator</code> in the /deposit-data call was not 32ETH then there will be an <strong>initial_deposit_data</strong> as well as a <strong>deposit_data</strong> part of the response.</p>\n<ul>\n<li><p>where <code>amount</code> is the ether being staked, denominated in gwei.</p>\n</li>\n<li><p>where <code>deposit_cli_version</code> denotes which cli version has been used.</p>\n</li>\n<li><p>where <code>deposit_data_root</code> is the hash tree root of the DepositData object. This is used as a checksum by the deposit contract.</p>\n</li>\n<li><p>where <code>deposit_message_root</code> is the hash tree root of the DepositMessage object.</p>\n</li>\n<li><p>where <code>fork_version</code> is specifies which chain the deposit is for.</p>\n</li>\n<li><p>where <code>network_name</code> should be “mainnet” for all Ethereum mainnet deposits and “holesky” for all Ethereum testnet deposits.</p>\n</li>\n<li><p>where the <code>pubkey</code> is the allocated public key for this validator. It is the unique identity of the validator on the consensus layer.</p>\n</li>\n<li><p>where <code>signature</code> is a BLS signature, using the secret signing key.</p>\n</li>\n<li><p>where <code>withdrawal_credentials</code> will begin with <strong>01</strong> and end with the 40 hexadecimal digits of the Ethereum account that withdrawals and consensus level rewards will be sent.</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the custodian.client.hierarchy mapping.</p>\n</li>\n<li><p>where <code>fee_recipient_address</code> is the Ethereum address where all execution level rewards will be sent.</p>\n</li>\n<li><p>where <code>number_of_validators</code> is the number of validators to be activated.</p>\n</li>\n<li><p>where <code>validator_set_uuid</code> is the unique identifier for the set of validators.</p>\n</li>\n<li><p>where <code>withdrawal_address</code> is the Ethereum address where the 32 ETH principal will be returned to as well as all consensus level rewards.</p>\n</li>\n<li><p>where <code>status</code> is whether this deposit information has been processed successfully by Twinstake and will either be PENDING if additional time is required between calling /deposit-data and /deposit, or GENERATED if the deposit information is available.</p>\n</li>\n</ul>\n<p><strong>Response Body (for a /data-transaction call)</strong></p>\n<p>N.B where the <code>amount_per_validator</code> in the /deposit-transaction call was not 32ETH then there will be an <strong>initial_payloads</strong> as well as a <strong>payloads</strong> part of the response.</p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>fee_recipient_address</code> is the Ethereum address where all execution level rewards will be sent.</p>\n</li>\n<li><p>where <code>number_of_validators</code> is the number of validators to be activated.</p>\n</li>\n<li><p>where <code>payloads</code> is the deposit information in payload format.</p>\n</li>\n<li><p>where <code>to_address</code> is the address which funds are being deposited to. This will be the Abyss Finance batch deposit contract if boolean=true and the eth2 deposit contract if batch=false.</p>\n</li>\n<li><p>where <code>validator_set_uuid</code> is the unique identifier for the set of validators.</p>\n</li>\n<li><p>where <code>withdrawal_address</code> is the Ethereum address where the 32 ETH principal will be returned to as well as all consensus level rewards.</p>\n</li>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format. This can be used to broadcast the transaction.</p>\n</li>\n<li><p>where <code>status</code> is whether this deposit information has been processed successfully by Twinstake and will either be PENDING if additional time is required between calling /deposit-transaction and /deposit, or GENERATED if the deposit information is available.</p>\n</li>\n</ul>\n<p><strong>Response Body (for a /deposit call)</strong></p>\n<p>N.B. this is the response body for calls made with data from the POST/deposit endpoint.</p>\n<ul>\n<li><p>where <code>to_address</code> is the address which funds are being deposited to. This will be the Abyss Finance batch deposit contract if boolean=true and the eth2 deposit contract if batch=false.</p>\n</li>\n<li><p>where <code>payloads</code> is the deposit information in payload format.</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>fee_recipient_address</code> is the Ethereum address where all execution level rewards will be sent.</p>\n</li>\n<li><p>where <code>number_of_validators</code> is the number of validators to be activated.</p>\n</li>\n<li><p>where <code>validator_set_uuid</code> is the unique identifier for the set of validators.</p>\n</li>\n<li><p>where <code>withdrawal_address</code> is the Ethereum address where the 32 ETH principal will be returned to as well as all consensus level rewards.</p>\n</li>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format. This can be used to broadcast the transaction.</p>\n</li>\n<li><p>where <code>status</code> is whether this deposit information has been processed successfully by Twinstake and will either be PENDING if additional time is required between calling /deposit-transaction and /deposit, or GENERATED if the deposit information is available.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","deposit"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators to be staked together</p>\n","type":"text/plain"},"key":"validator_set_uuid","value":"51fd9a34-2a18-11ee-be56-0242ac120002"},{"disabled":true,"description":{"content":"<p>The unique identifier as provided in the response of /deposit and representing one or multiple validators to be staked together</p>\n","type":"text/plain"},"key":"id","value":"51fd9a34-2a18-11ee-be56-0242ac120002"},{"disabled":true,"description":{"content":"<p>The format that the deposit response should be provided in, in the format of DATA, TRANSACTION, or BATCH_TRANSACTION</p>\n","type":"text/plain"},"key":"type","value":"TRANSACTION"},{"disabled":true,"description":{"content":"<p>The address of the delegator for type TRANSACTION and BATCH_TRANSACTION</p>\n","type":"text/plain"},"key":"delegator_address","value":"0xgh6ty...383hf9"}],"variable":[]}},"response":[{"id":"c22afcbe-f8cf-44f3-8ac1-368fdded5ea0","name":"Deposit-data","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/ethereum/deposit?validator_set_uuid=b77ddf82-9f53-41a8-b686-b13d1e86da98","host":[""],"path":["v2","staking","ethereum","deposit"],"query":[{"key":"validator_set_uuid","value":"b77ddf82-9f53-41a8-b686-b13d1e86da98"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"deposit_data\": [\n        {\n            \"amount\": 32000000000,\n            \"deposit_cli_version\": \"2.7.0\",\n            \"deposit_data_root\": \"a8bf0d2c246dabccca4425ac6a43c39d5e709d41410978281090b167dd0aeebe\",\n            \"deposit_message_root\": \"313a68c28d7e3b0019584efbec04b041ae4e7e1830b3f662486ad8badea7e6f0\",\n            \"fork_version\": \"01017000\",\n            \"network_name\": \"mainnet\",\n            \"pubkey\": \"b2fee3b9b603ffb8de4b3805065a236200873f8297b39bc4935dddf21d20bb9c54142a7d2c96d19a01ce40996face399\",\n            \"signature\": \"97c1e6e1ba7df8a3418d6108226f8fc5d3f4bad50c4982eb1fdae683f6763014aaa39c94eeec624904a8458e31e7ee3014875f526a2972fcfb71eb4ee09c7127853481b3ca34a6a9472810cd89c317178489a7e3a192c939d5feb4688d5fef0e\",\n            \"withdrawal_credentials\": \"0100000000000000000000009fbe1c1740339d29b119782585cbdfdfe598ce44\"\n        }\n    ],\n    \"entity\": \"CustodianA.ClientB\",\n    \"fee_recipient_address\": \"0x35CD252C22FaFe0527c2f11E68fa6e33Ef94FD09\",\n    \"number_of_validators\": 1,\n    \"validator_set_uuid\": \"b77ddf82-9f53-41a8-b686-b13d1e86da98\",\n    \"withdrawal_address\": \"0x9FbE1C1740339d29b119782585CbdfDFe598cE44\",\n    \"status\": \"GENERATED\"\n}"},{"id":"3d35357d-513c-4af0-b9cc-ed7aa038c213","name":"Deposit-data (multi-part deposit)","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"url":{"raw":"/v2/staking/ethereum/deposit?validator_set_uuid=b77ddf82-9f53-41a8-b686-b13d1e86da98","host":[""],"path":["v2","staking","ethereum","deposit"],"query":[{"key":"validator_set_uuid","value":"b77ddf82-9f53-41a8-b686-b13d1e86da98"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"deposit_data\": [\n        {\n            \"amount\": 31000000000,\n            \"deposit_cli_version\": \"2.7.0\",\n            \"deposit_data_root\": \"95282eb04a64cfab0efdf9233cd57641e00e6f9f266de87b2b5f7297d01fb6f2\",\n            \"deposit_message_root\": \"24ebab03fc65374cfea99d6466cc4484ba87dcd0766a6b88f0402c0181e3c15b\",\n            \"fork_version\": \"01017000\",\n            \"network_name\": \"holesky\",\n            \"pubkey\": \"88c1aa34e8b0850529d5e86f7a19b323822aa6a315658645d584167fca5dd795c15792b7f23a5c981c2c1f4cea9b5b4a\",\n            \"signature\": \"8afac73284e171a77ff50192ce5bc98d0267150b8534591300d30725630aa183dd31739e224341c42aca30f7bf1389860398f6976996cb4000e1c41cdaa34b8d9ae9d85cc3be68fe857bb69d40d72806314384c92cb1f79becd4ed6efdcab994\",\n            \"withdrawal_credentials\": \"0100000000000000000000009fbe1c1740339d29b119782585cbdfdfe598ce44\"\n        }\n    ],\n    \"entity\": \"devcustodian.devclient\",\n    \"fee_recipient_address\": \"0x35CD252C22FaFe0527c2f11E68fa6e33Ef94FD09\",\n    \"initial_deposit_data\": [\n        {\n            \"amount\": 1000000000,\n            \"deposit_cli_version\": \"2.7.0\",\n            \"deposit_data_root\": \"36e17323c8c83ea620e25b197b4456d676af057776d2aaf8e91b58ff0f7037ce\",\n            \"deposit_message_root\": \"96f45d34020d347f61e5353cc2aff99ff660ada3b547f27295853ab131531b6a\",\n            \"fork_version\": \"01017000\",\n            \"network_name\": \"holesky\",\n            \"pubkey\": \"88c1aa34e8b0850529d5e86f7a19b323822aa6a315658645d584167fca5dd795c15792b7f23a5c981c2c1f4cea9b5b4a\",\n            \"signature\": \"83398400e0248d7a6690de0fc4c445d8fae59ba4cb277ca4b6b54efed19d29c5f1fc9cd777c24c41e3f81cdc2d980a91047be2ac0969ee96dca20f31a90607f8a5379c1ef1e0d8830fb0679744092cc93f94541c039dfcb1d4fcb3787fb7f061\",\n            \"withdrawal_credentials\": \"0100000000000000000000009fbe1c1740339d29b119782585cbdfdfe598ce44\"\n        }\n    ],\n    \"number_of_validators\": 1,\n    \"validator_set_uuid\": \"3a5c85d5-dee7-4ff5-9e31-6a493a74dd30\",\n    \"withdrawal_address\": \"0x9FbE1C1740339d29b119782585CbdfDFe598cE44\",\n    \"status\": \"GENERATED\"\n}"},{"id":"9182e1c2-4bec-4453-b8dd-b8bbfd4823eb","name":"Deposit-transaction","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/ethereum/deposit?validator_set_uuid=e9d38d8e-db24-41d8-9de5-50adefb225aa&type=TRANSACTION","host":[""],"path":["v2","staking","ethereum","deposit"],"query":[{"key":"validator_set_uuid","value":"e9d38d8e-db24-41d8-9de5-50adefb225aa"},{"key":"type","value":"TRANSACTION"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"entity\": \"CustodianA.ClientB\",\n    \"fee_recipient_address\": \"0x15719Ed09527Ea71503Dc706d621278B17563750\",\n    \"number_of_validators\": 1,\n    \"payloads\": [\n        \"0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120911de39c70d976f8f7fed832818fbb8d16bc2be34ea10600c8b33ddaa34d1acd0000000000000000000000000000000000000000000000000000000000000030912d110cfab9f250355af133dc6372d3b7cb3df495ee2c9d99b915c1f6a207f3e8f7cb96b24faca38bd19e601807968a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020010000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000006092eca0b407e61248514c0fc9da79f8bc407ae4f11084dc6024db29ca329df8a02703d5ad5104d3fce19b0573f38660a70d722b18006cd328443af4908abd38c146645d458e09703a2fb2b2784cd2f158334a5021ccc4ef14d713416c1888de09\"\n    ],\n    \"to_address\": \"0x4242424242424242424242424242424242424242\",\n    \"validator_set_uuid\": \"e9d38d8e-db24-41d8-9de5-50adefb225aa\",\n    \"withdrawal_address\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n    \"transactions\": [\n        {\n            \"raw\": {},\n            \"hash\": \"string\",\n            \"hex\": \"string\",\n            \"status\": \"GENERATED\"\n        },\n        ...\n    ]\n}"},{"id":"7cb8fc85-89fd-4369-8157-fc0e3a15a70c","name":"Deposit","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/ethereum/deposit?id=d608c3d4-9be3-4f88-987g-020z7781b73a&type=TRANSACTION&delegator_address=0xdAC17F958D2ee523a2206206994597C13D831ec7","host":[""],"path":["v2","staking","ethereum","deposit"],"query":[{"key":"id","value":"d608c3d4-9be3-4f88-987g-020z7781b73a"},{"key":"type","value":"TRANSACTION"},{"key":"delegator_address","value":"0xdAC17F958D2ee523a2206206994597C13D831ec7"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"entity\": \"CustodianA.ClientB\",\n    \"fee_recipient_address\": \"0x15719Ed09527Ea71503Dc706d621278B17563750\",\n    \"number_of_validators\": 1,\n    \"payloads\": [\n       \"0x22895118002000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120911de39c70d976f8f7fed822818fbb8d16bc2be34ea10600c8b33ddaa34d1acd0000000000000000000000000000000000000000000000000000000000000030912d110cfab9f250355af133dc6372d3b7cb3df495ee2c9d99b915c1f6a207f3e8f7cb96b24faca38bd19e601807968a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020010000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000006082eca0b407e61248514c0fc9da79g8bc407ae4f11084dc6024db29ca329df8a02703a5ad5104d3fce19b0573f38660a70d722c18006cd328443ff4908abd38z146645d458e09703k2fb2b2784cd2f158334a5021ccc4ef14d713416c1888de09\",\n        ...\n    ],\n    \"to_address\": \"0x4242424242424242424242424242424242424242\",\n    \"validator_set_uuid\": \"e9d38d8e-db24-41d8-9de5-50adefb225aa\",\n    \"withdrawal_address\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n    \"transactions\": [\n        {\n            \"raw\": {\n                \"gas\": 67890,\n                \"chainId\": 560048,\n                \"value\": 32000000000000000000,\n                \"maxFeePerGas\": 999999999,\n                \"maxPriorityFeePerGas\": 99999999,\n                \"nonce\": 0,\n                \"to\": \"0x00000000219ab540354cBB839Dbe05303d7706Fa\",\n                \"data\": \"0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001308cd0eab44e2e4c614d9cdab81c37202a8f1384a9b36c6e34644deb7d597b9dbb0000000000000000000000000000000000000000000000000000000000000030ad6de65f3bd5f270edfc12487253b389a77aeb761354526d8caabaf7df0ce28b01a0f33bc68d04c2dd86dd1da5a2b5790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200200000000000000000000009fbe1c1740339d29b119782585cbdfdfe598ce4400000000000000000000000000000000000000000000000000000000000000608200a86f91cda6ec2f1fde9b9e7523b56d4fa6c90ba0fca71715a6bd7918ee3e5ea9225c74d26c883e739d76a04554c906ce94258917976c8233e9dc9562192ea077bfb2b8e5a77bb97fd5332ckc5fc471268bc8c88009a3q160578f0b4z5z83\"\n            },\n            \"hash\": \"e1d96e99ce5113f966b92161e11102535dc86989a13fc05b512ea1b0d2bc2982\",\n            \"hex\": \"01d901f983078bb0808401068e1f843ab203d382eb669400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b901a422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001208cd0eab44e2e4c614d9cdab81c37202a8f1384a9b36c6e34644deb7d597b9dbb0000000000000000000000000000000000000000000000000000000000000030ad6de65f3bd5f270edfc12487253b389a77aeb761354526d8caabaf7df0ce28b01a0d33bc68d04c2dd86dd1da5a2b5790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200200000000000000000000009fbe1c1740339d29b119782585cbdfdfe598ce4400000000000000000000000000000000000000000000000000000000000000608200a86f91cda6ec2f1fde9a9s7523d56a4bc6c90av0fdb71715a6bd7918ff1e0ea9115c74d26c883e739d76a04554c906ce94258917976c8233e9dc9562192ea077bfa2b8e5a77bb97fd5332cfc5fc471268bc8c88009b3f160578f0e4c5f83c0\",\n            \"status\": \"GENERATED\"\n        }\n    ]\n}"},{"id":"f2dbd786-b05e-4361-8a78-5fd26e794e58","name":"Deposit is still processing","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/staking/ethereum/deposit","host":[""],"path":["v2","staking","ethereum","deposit"],"query":[{"key":"validator_set_uuid","value":"51fd9a34-2a18-11ee-be56-0242ac120002","description":"The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators to be staked together","disabled":true}]}},"code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"PENDING\"\n}"}],"_postman_id":"3c6940b7-be72-47e5-aef8-9b6fe382b6d2"},{"name":"Deposit ID list","id":"25fdbd9d-60e4-432a-bf3a-0593b8bfa031","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ethereum/deposits","description":"<p>This endpoint provides all id that have been generated through the asynchronous deposit route.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>If these parameters are not specified then page=1 and page_size=10 will be used.<br />Data is sorted by <code>created_at</code> in descending order.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>Where <code>id</code> is the UUID for the set of validators.</p>\n</li>\n<li><p>Where <code>status</code> is:</p>\n<ul>\n<li><p><strong>Processing:</strong> the associated POST/deposit request is still being processed by the Twinstake system and the deposit transaction is not yet accessible.</p>\n</li>\n<li><p><strong>Generated</strong>: the associated POST/deposit request has been successfully processed by the Twinstake system and the deposit transaction is accessible.</p>\n</li>\n<li><p><strong>Failed:</strong> the associated POST/deposit request has been unsuccessfully processed by the Twinstake system and the deposit transaction is not accessible.</p>\n</li>\n</ul>\n</li>\n<li><p>Where <code>created_at</code> is the datetime that the deposit transaction was created through the Twinstake API</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","deposits"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The date that rewards information should be shown from in the format of YYYY-MM-DD e.g 2025-11-06</p>\n","type":"text/plain"},"key":"date_from","value":"2025-05-01"},{"disabled":true,"description":{"content":"<p>The date that rewards information should be shown until in the format of YYYY-MM-DD e.g 2025-11-06</p>\n","type":"text/plain"},"key":"date_to","value":"2025-11-10"},{"disabled":true,"description":{"content":"<p>The number of pages in the response e.g 2</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>The number of delegator/validator pairs in the response e.g 500</p>\n","type":"text/plain"},"key":"page_size","value":"10"}],"variable":[]}},"response":[{"id":"551d86c1-544e-48be-8400-546a0096e76e","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/staking/ethereum/deposits?date_from=2025-05-01&date_to=2025-05-11&page=1&page_size=10","host":[""],"path":["v2","staking","ethereum","deposits"],"query":[{"key":"date_from","value":"2025-05-01"},{"key":"date_to","value":"2025-05-11"},{"key":"page","value":"1"},{"key":"page_size","value":"10"}]}},"code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"metadata\": {\n    \"page\": 1,\n    \"page_size\": 10,\n    \"total_count\": 3,\n    \"page_count\": 1\n    }\n  },\n  \"data\": [\n    {\n      \"id\": \"h877h-4bf794-fn7gtcg8\",\n      \"status\": \"GENERATED\",\n      \"created_at\": \"2025-10-13T13:22:09Z\",\n    },\n    {\n      \"id\": \"kgh865-gdf4s-byf77\",\n      \"status\": \"PROCESSING\",\n      \"created_at\": \"2025-10-13T13:22:09Z\",\n    },\n    {\n      \"id\": \"a43gf-9ghwy-119kl\",\n      \"status\": \"GENERATED\",\n      \"created_at\": \"2025-10-13T13:22:09Z\",\n    }\n    }\n  ]\n}"}],"_postman_id":"25fdbd9d-60e4-432a-bf3a-0593b8bfa031"},{"name":"Switch validator type","id":"8d1f956e-d009-4888-a9a7-8fb50a28d115","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"validator_indexes\": [123456, 789012, 345678],\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/switch","description":"<p>This endpoint will allow an existing validator with a max effective balance of 32ETH (with 0x01 validator_type) to be switched to a validator with a max effective balance of 2048 ETH (with 0x02 validator_type).</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>validator_indexes: The index for the Ethereum validator/s that is/are to be switched, [array of integer], (mandatory). N.B this process is not reversible and validator can only increase their max effective balance and not reduce.</p>\n</li>\n<li><p>withdrawal_address: The Ethereum address that funds will be received to, [string], (mandatory). N.B this must be the same address as set within the withdrawal credentials for the validator.</p>\n</li>\n</ul>\n<p>Please note that this endpoint can only be used to switch the credentials of Twinstake validators.</p>\n<p><strong>Response Body</strong></p>\n<p>a list of:</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation</p>\n</li>\n</ul>\n<p>N.B transactions should be broadcast in the given nonce value order</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","validators","switch"],"query":[],"variable":[]}},"response":[{"id":"c6a871af-ac2f-4b4f-a049-cb948bdd837c","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"validator_indexes\": [123456, 789012, 345678],\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/switch"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"8d1f956e-d009-4888-a9a7-8fb50a28d115"},{"name":"Validator consolidation","id":"701188e9-ebf6-4361-bd77-b17eef924c4e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"source_validator_indexes\": [987654],\n    \"target_validator_index\": 658354\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/consolidate","description":"<p>This endpoint will allow multiple validators to be consolidated into one - up to a maximum validator balance of 2048 ETH. N.B up to 2 validators can be consolidated in a single transactions. If more than 2 validators are to be consolidated then a list of transactions will be generated. Validators must be activated at least 256 epochs ago to be consolidated.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>source_validator_indexes: The index for the Ethereum validator/s that are to be consolidated, [array of integers], (mandatory)</p>\n</li>\n<li><p>target_validator_index: The index for the Ethereum validator that is to be consolidated into, [integer], (mandatory)</p>\n</li>\n<li><p>withdrawal_address: The Ethereum address set within the withdrawal credentials for the source_validator_indexes, [string], (mandatory)</p>\n</li>\n</ul>\n<p>Please note that this endpoint can only be used to consolidate into Twinstake validators.</p>\n<p><strong>Response Body</strong><br />list of:</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n<p>N.B transactions should be broadcast in the given nonce value order</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","validators","consolidate"],"query":[],"variable":[]}},"response":[{"id":"a9fddbbe-1e97-49d2-90b2-0739f5221749","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"source_validator_indexes\": [987654],\n    \"target_validator_index\": 658354\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/consolidate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"701188e9-ebf6-4361-bd77-b17eef924c4e"},{"name":"Create top up","id":"9aaec84d-7a82-4c20-b208-79990d311c97","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"validator_index\": 987654,\n    \"amount\": 600,\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/top-up","description":"<p>This endpoint will allow the topping up of the balance for a 0x02 validator type - up to a maximum validator balance of 2048 ETH.</p>\n<p>The deposit transaction information is returned asynchronously and accessed through the <code>GET/v2/staking/ethereum/validators/top-up</code> endpoint.</p>\n<p>Please allow a few minutes between generation through this endpoint and calling the GET/top-up endpoint.</p>\n<p>Please note that this endpoint can only be used to top up Twinstake validators.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>validator_index: The index for the Ethereum validator that is to have the staked ETH amount increased, [integer], (mandatory)</p>\n</li>\n<li><p>amount: The amount of ETH, denominated in ETH, to top up the validator balance by, [integer], (mandatory)</p>\n</li>\n<li><p>withdrawal_address: The Ethereum address set within the withdrawal credentials for the source_validator_indexes, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>deposit_id</code> is the UUID for the top up deposit to be used in the GET/v2/staking/ethereum/validators/top-up endpoint</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","validators","top-up"],"query":[],"variable":[]}},"response":[{"id":"d9d7b332-eb16-47b7-af81-0f225768321a","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"validator_index\": 987654,\n    \"amount\": 600,\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/top-up"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{'location': '/v2/staking/ethereum/validators/top-up?deposit_id=ee284026-41cd-4a81-97d4-89ba590dd266',\n 'deposit_id': 'ee284026-41cd-4a81-97d4-89ba590dd266'}"}],"_postman_id":"9aaec84d-7a82-4c20-b208-79990d311c97"},{"name":"Top up transaction","id":"5a6ba452-5021-49fc-b34c-a7b2c2f639c5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ethereum/validators/top-up","description":"<p>This endpoint will provide the generated deposit top up transaction as generated asynchronously through the <code>POST/v2/staking/ethereum/validators/top-up</code> endpoint.</p>\n<p>Please allow a few minutes between generation through the POST/topup and this endpoint.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>deposit_id: The UUID for the top up deposit as generated by the POST/v2/staking/ethereum/validators/top-up endpoint, [string], (mandatory)</p>\n</li>\n<li><p>sender_address: The Ethereum address which will broadcast this transaction, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation</p>\n</li>\n<li><p>where <code>status</code> is whether this deposit top up has been processed successfully by Twinstake and will either be PENDING if additional time is required between calling POST/validators/top-up and this endpoint, or GENERATED if the deposit top up information is available.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","validators","top-up"],"query":[{"disabled":true,"key":"deposit_id","value":"\"ee284026-41c...dd266\""},{"disabled":true,"key":"sender_address","value":"\"0xgh6ty...383hf9\""}],"variable":[]}},"response":[{"id":"609a9548-ad9c-447a-93cf-425037757707","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/staking/ethereum/validators/top-up?deposit_id=f3c9a1d2-5e8b-4c77-93fa-92a1766e35c8&sender_address=0x6585hbfy8g....338389jf9f","path":["v2","staking","ethereum","validators","top-up"],"query":[{"key":"deposit_id","value":"f3c9a1d2-5e8b-4c77-93fa-92a1766e35c8"},{"key":"sender_address","value":"0x6585hbfy8g....338389jf9f"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{'raw': {'gas': 50905,\n  'chainId': 560048,\n  'value': 5000000000000000000,\n  'maxFeePerGas': 992200280,\n  'maxPriorityFeePerGas': 80572317,\n  'nonce': 8,\n  'to': '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n  'data': '0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001209c842de605b46cfe80fcbeb15dbadbe54230b00493b03c33da2178bd60dc1939000000000000000000000000000000000000000000000000000000000000003097e4a9b998388d1f53dc0e562d8a5b97cf34fcd36fda4c2a1d3e09d41ec69f0f20b986bcc12790fadff3460e37cf0a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200200000000000000000000000b2d3493112e99c83b769c5282bf467d83ba65610000000000000000000000000000000000000000000000000000000000000060b8055c292c75c48907b0779c7105cd204384cf169591062ecb306390820ed36f0942da5e5ebffcc7b95ea8b49ee434e50e11e2bba501d36cce899f66197be7876100958a7904b5589e0a821db2fd651c37724901f148c7c1ac21e5d1bbf8ea5a'},\n 'hash': '7d8470381fcbd6aa5a2e65364f8bd62661566df14d610e72610d5c5908d44336',\n 'hex': '02f901d883088bb0088404cd6f9d843b23c65882c6d99400000000219ab540356cbb839cbe05303d7705fa884563918244f40000b901a422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001209c842de605b46cfe80fcbeb15dbadbe54230b00493b03c33da2178bd60dc1939000000000000000000000000000000000000000000000000000000000000003097e4a9b998388d1f53dc0e562d8a5b97cf34fcd36fda4c2a1d3e09d41ec69f0f20b986bcc12790fadff3460e37cf0a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200200000000000000000000000b2d3493112e99c83b769c5282bf467d83ba65610000000000000000000000000000000000000000000000000000000000000060b8055c292c75c48907b0779c7105cd204384cf169591062ecb306390820ed36f0942da5e5ebffcc7b95ea8b49ee434e50e11e2bba501d36cce899f66197be7876100958a7904b5589e0a821db2fd651c37724901f148c7c1ac21e5d1bbf8ea5ac0',\n 'status': 'GENERATED'}"}],"_postman_id":"5a6ba452-5021-49fc-b34c-a7b2c2f639c5"},{"name":"Activation time","id":"217fcffe-3deb-4d30-910b-f8939794b740","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"/v2/insights/ethereum/calculator/activation","description":"<p>This endpoint provides the current activation time for an Ethereum validator/s to help best optimise any validator deposits.</p>\n<p><strong>Request Body</strong></p>\n<p>N/A</p>\n<p>To Note:</p>\n<ul>\n<li>This endpoint will return <em>only</em> mainnet data</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>datetime</code> is the date and time for which calculation was done in YYYY-MM-DD HH:MM:SS format</p>\n</li>\n<li><p>where <code>queue_wait_time</code> is in the format of HH:MM and shows the time a validator would need to wait in the activation queue until it is actively earning rewards</p>\n</li>\n<li><p>where <code>queue_size</code> is the number of ETH currently in the activation queue</p>\n</li>\n<li><p>where <code>churn_limit</code> is the number of ETH that can be activated per epoch</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","insights","ethereum","calculator","activation"],"query":[],"variable":[]}},"response":[{"id":"a9ab2d22-b5b6-4106-a0d5-afc8d8e649d1","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"/v2/insights/{ETH}/calculator/activation"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"datetime\": \"2025-01-01T15:26:00\",\n\t\"queue_wait_time\": \"23:15\",\n\t\"queue_size\": 150,\n\t\"churn_limit\": 256,\n}"}],"_postman_id":"217fcffe-3deb-4d30-910b-f8939794b740"}],"id":"e04b5658-5e52-4ccb-80fc-e744c844bfd0","description":"<p>In order to stake to a Twinstake Ethereum validator you must first provide the necessary information so that you can receive the earned rewards and eventual stake back. This is provided by calling either the POST/deposit-data, POST/deposit-transaction, or POST/deposit endpoint.</p>\n<p>The <strong>POST/deposit-data</strong> endpoint should be used when only the ABI call data is required from Twinstake. Before signing and broadcasting the validator deposit, other key staking data must be added into the transaction by the custodian/wallet provider. This route is most suitable for MPC wallet solutions or for multi-part deposits. This route does not support batch deposits.</p>\n<p>The <strong>POST/deposit-transaction</strong> endpoint should be used when a fully formed deposit transaction is required as the output. This can be signed as is and then broadcast to effect the validator deposit. This endpoint also supports batch deposits.</p>\n<p>The <strong>POST/deposit</strong> endpoint can be used to generate all types of deposit data; whether ABI, fully formed deposit transaction, or batch deposit contract transaction.</p>\n<p>As this is an asynchronous process, the <strong>GET/deposit</strong> endpoint must be called after one of the above to access the deposit payload/s.</p>\n<p>The output from <strong>POST/deposit-data</strong> must then be completed with the relevant information via a custodian/wallet provider/staking CLI and then signed. It can be broadcast through the Twinstake /broadcast endpoint or another route of choice.<br />The output from <strong>POST/deposit-transaction</strong> must be signed by the relevant custodian/wallet provider and can then be broadcast through the Twinstake /broadcast endpoint or another route of choice.<br />Depending on the type of output requested from the <strong>POST/deposit</strong> endpoint, this may require additional information being added before signing or can be signed and broadcast as is. As above, the result can be broadcast through the Twinstake /broadcast endpoint or another route of choice.</p>\n","_postman_id":"e04b5658-5e52-4ccb-80fc-e744c844bfd0","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Unstaking","item":[{"name":"Full exit","id":"e9420bac-e55e-4b6b-b105-9700024e4d8a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"validator_indexes\": [123456,123457]\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/exit","description":"<p>This endpoint will allow an existing validator to be fully exited. The output of this endpoint is the unsigned transaction which must be signed and broadcast. This complements the existing exit process at the consensus layer using pre-signed exit messages.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>validator_indexes: The index for the Ethereum validator/s that is/are to be exited, [array of integer], (mandatory)</p>\n</li>\n<li><p>withdrawal_address: The Ethereum address that funds will be received to, [string], (mandatory). N.B this must be the same address as set within the withdrawal credentials for the validator.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>a list of:</p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n<p>N.B transactions should be broadcast in the given nonce value order</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","validators","exit"],"query":[],"variable":[]}},"response":[{"id":"456fea88-aeba-4ded-b50e-d178a25070d3","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"validator_indexes\": [123456,123457]\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/exit"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"e9420bac-e55e-4b6b-b105-9700024e4d8a"},{"name":"Partial exit","id":"903fda4d-636d-4115-8c81-c9f9fa78ac41","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"amount\": 100,\n    \"validator_index\": 123456,\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/withdrawal","description":"<p>This endpoint will allow for a partial exit of the validator whereby some amount of the staked balance is withdrawn. The output of this endpoint is the unsigned transaction which must be signed and broadcast.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>amount: The amount of ETH, denominated in wei, to exit for the validator, [integer], (mandatory). N.B if the remaining balance is less than the 32 ETH minimum this will force a full exit of the validator</p>\n</li>\n<li><p>validator_index: The index for the Ethereum validator that is to have the staked ETH amount reduced, [integer], (mandatory)</p>\n</li>\n<li><p>withdrawal_address: The Ethereum address that funds will be received to, [string], (mandatory). N.B this must be the same address as set within the withdrawal credentials for the validator.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","validators","withdrawal"],"query":[],"variable":[]}},"response":[{"id":"138e8053-1593-4ebb-963e-12bf18ab8511","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"amount\": 100,\n    \"validator_index\": 123456,\n    \"withdrawal_address\": \"0xgh6ty...383hf9\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/validators/withdrawal"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"903fda4d-636d-4115-8c81-c9f9fa78ac41"},{"name":"Upload GPG key","id":"443dd2b8-3147-4e56-8a2b-7764addb6a94","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"gpg_public_key\": \"Ii0tLS0tQkVHSU4gUEdQIFBVQkxJQyB ... ORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tIg==\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/ethereum/exit/key","description":"<p>This endpoint allows a GPG public key to be associated with an entity filter, and for all exit messages of that entity filter to be encrypted with it. This endpoint must be called before exit messages can be obtained from <code>GET/v2/unstaking/ethereum/exit/messages</code>.</p>\n<p><strong>Query Parameter</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA</code>, <code>CustodianB.ClientC</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>gpg_public_key: The base64-encoded GPG public key to encrypt the exit message with, e.g <code>\"Ii0tLS0tQkVHSU4gUEdQIFBVQkxJQyB...ORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tIg==\"</code> [string], (mandatory)</li>\n</ul>\n<p><strong>To Note</strong><br />If a subsequent GPG key is associated with an entity_filter then exit messages will only be able to be decrypted with the <em>last</em> uploaded GPG key.</p>\n<p>Re-encrypting exit messages with a new key can take up to 5minutes. Please wait 5mins before calling the <code>GET/v2/unstaking/ethereum/exit/messages</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","exit","key"],"host":[""],"query":[{"disabled":true,"key":"entity_filter","value":"CustodianA"}],"variable":[]}},"response":[{"id":"0757ad00-7650-481c-a680-e775a7ec74bd","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"gpg_public_key\": \"Ii0tLS0tQkVHSU4gUEdQIFBVQkxJQyB ... ORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tIg==\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"/v2/staking/ethereum/key?entity_filter=CustodianA","host":[""],"path":["v2","staking","ethereum","key"],"query":[{"key":"entity_filter","value":"CustodianA"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\t\t\t    \"message\": \"Successfully uploaded GPG public key. Signed exit messages for CustodianA can now be accessed.\n  }\n}"}],"_postman_id":"443dd2b8-3147-4e56-8a2b-7764addb6a94"},{"name":"Exit messages (old)","id":"32b16c6a-40f2-4b32-a973-f37007924d6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ethereum/exit/messages","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/staking/ethereum/exit-messages</code> <strong>]</strong></p>\n<p>This endpoint provides all validator exit messages for a given validator set UUID or entity filter. These exit messages will be encrypted with the GPG key as provided in <code>POST/v2/unstaking/ethereum/exit/key</code>. These exit messages must be broadcast to effect the validator exit.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>validator_set_uuid: The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators e.g <code>51fd9a34-2a18-11ee-be56-0242ac120002</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA</code>, <code>CustodianB.ClientC</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p>At least one of the above must be provided. The below is an optional parameter.</p>\n<ul>\n<li>validator_indexes: The index for the Ethereum validator/s e.g <code>123456</code>, [integer], (optional)<br />  N.B more than one validator index is able to be provided, given it is within the same validator_set_uuid or the same entity_filter.</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>Exit messages in response are grouped using entity used during deposit.</p>\n<ul>\n<li><p>where <code>exit_message</code> is the exit message which is encrypted using the given GPG key from the <code>POST/v2/unstaking/ethereum/key</code> endpoint.</p>\n</li>\n<li><p>where <code>pgp_fingerprint</code> is a hash of the GPG key as provided from the <code>POST/v2/unstaking/ethereum/key</code> endpoint.</p>\n</li>\n<li><p>where <code>validator_index</code> is the index for the Ethereum validators.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","exit","messages"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators</p>\n","type":"text/plain"},"key":"validator_set_uuid","value":"51fd9a34-2a18-11ee-be56-0242ac120002"},{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA"},{"disabled":true,"description":{"content":"<p>The index for the Ethereum validator/s.</p>\n","type":"text/plain"},"key":"validator_indexes","value":"123456"}],"variable":[]}},"response":[{"id":"4cb5287d-2c2c-40ae-91dc-74d8d57880e4","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/ethereum/exit/messages?entity_filter=CustodianA","host":[""],"path":["v2","staking","ethereum","exit","messages"],"query":[{"key":"entity_filter","value":"CustodianA"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"CustodianA.ClientB\": [\n        {\n            \"exit_message\": \"-----BEGIN PGP MESSAGE-----\\n\\nhIwDOdtmaLL3+QUBA/4skBAJkdYT85g8ocrOvTWGEsyl/7swJS747kJwxuOffo8w\\nYebAR9NrdpygXWXe1jvi9Rq2Dm33KKR1REH3hvgZxx/fpORNXbDvZagESCWzgza2\\nJgN/lnDxXxm2Tpe77tDjZXlVBheqZqvKmaLYq5nllyDe+chrNTXuHiZRiyGlE9LA\\nRQEUr/Mk+Rp+xbYRAhfO/VDgJaqoM17F78oJbeFNrRgfLu+qBHPC6OLrIb0IRmJX\\nRrSHf1tarqQfIy2XJ6RuxdEG6jq5gUKYGSoSYZZ6NwHTN6wM44+XdGKpL0dRxzS+\\n1pS8E+PuN6lG2ybRc0yBvm4xarhsMCpl1Kdab0otOLiRT8iAh+TbMDQNm8Cpv7gj\\nhA6r9dJ7hflOqBOlyuqXI/P027mXu/Dy0whahe4KQ2bf23EtGRExg4kL2BR/XWlY\\nCRvM1i75S4nmiseEuKD3IDSfgudoc+OySYUzD4XkfrEp9BXWh+wuekOcVxRz7dnJ\\nVvS6lqIbCGish1OIEXPt3ujac27Bvg==\\n=FvgP\\n-----END PGP MESSAGE-----\\n\",\n            \"pgp_fingerprint\": \"DEB727D7A6A88204E0A1DFA46D1B9830E7C73938\",\n            \"validator_index\": \"1627615\"\n        },"}],"_postman_id":"32b16c6a-40f2-4b32-a973-f37007924d6a"},{"name":"Exit messages","id":"d82848de-8f03-40ee-9bde-22867dffb26b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/ethereum/exit-messages","description":"<p>This endpoint provides all validator exit messages for a given validator set UUID or entity filter. These exit messages will be encrypted with the GPG key as provided in <code>POST/v2/unstaking/ethereum/exit/key</code>. These exit messages must be broadcast to effect the validator exit.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>validator_set_uuid: The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators e.g <code>51fd9a34-2a18-11ee-be56-0242ac120002</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA</code>, <code>CustodianB.ClientC</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p>At least one of the above must be provided. The below is an optional parameter.</p>\n<ul>\n<li>validator_indexes: The index for the Ethereum validator/s e.g <code>123456</code>, [integer], (optional)<br />  N.B more than one validator index is able to be provided, given it is within the same validator_set_uuid or the same entity_filter.</li>\n</ul>\n<p>At least one of the below must be provided:</p>\n<ul>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of validators in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a validator_set_uuid or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=1000 will be used.  </p>\n<p><strong>Response Body</strong></p>\n<p>Exit messages in response are grouped using entity used during deposit.</p>\n<ul>\n<li><p>where <code>exit_message</code> is the exit message which is encrypted using the given GPG key from the <code>POST/v2/unstaking/ethereum/key</code> endpoint.</p>\n</li>\n<li><p>where <code>pgp_fingerprint</code> is a hash of the GPG key as provided from the <code>POST/v2/unstaking/ethereum/key</code> endpoint.</p>\n</li>\n<li><p>where <code>validator_index</code> is the index for the Ethereum validators.</p>\n</li>\n<li><p>where the <code>metadata</code> provides pagination information for the response.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","ethereum","exit-messages"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The unique identifier as provided in the response of /deposit-data or /deposit-transaction and representing one or multiple validators</p>\n","type":"text/plain"},"key":"validator_set_uuid","value":"51fd9a34-2a18-11ee-be56-0242ac120002"},{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA"},{"disabled":true,"description":{"content":"<p>The index for the Ethereum validator/s.</p>\n","type":"text/plain"},"key":"validator_indexes","value":"123456"}],"variable":[]}},"response":[{"id":"d1076228-1b97-4ab4-9cef-aceaaf1ee33c","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/ethereum/exit/messages?entity_filter=CustodianA","host":[""],"path":["v2","staking","ethereum","exit","messages"],"query":[{"key":"entity_filter","value":"CustodianA"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"metadata\": {\n    \"page\": 5,\n    \"page_size\": 20,\n    \"page_count\": 27,\n    \"total_count\": 521\n  },\n  \"data\": [\n      {\n          \"exit_message\": \"-----BEGIN PGP MESSAGE-----\\n\\nhIwDOdtmaLL3+QUBA/4skBAJkdYT85g8ocrOvTWGEsyl/7swJS747kJwxuOffo8w\\nYebAR9NrdpygXWXe1jvi9Rq2Dm33KKR1REH3hvgZxx/fpORNXbDvZagESCWzgza2\\nJgN/lnDxXxm2Tpe77tDjZXlVBheqZqvKmaLYq5nllyDe+chrNTXuHiZRiyGlE9LA\\nRQEUr/Mk+Rp+xbYRAhfO/VDgJaqoM17F78oJbeFNrRgfLu+qBHPC6OLrIb0IRmJX\\nRrSHf1tarqQfIy2XJ6RuxdEG6jq5gUKYGSoSYZZ6NwHTN6wM44+XdGKpL0dRxzS+\\n1pS8E+PuN6lG2ybRc0yBvm4xarhsMCpl1Kdab0otOLiRT8iAh+TbMDQNm8Cpv7gj\\nhA6r9dJ7hflOqBOlyuqXI/P027mXu/Dy0whahe4KQ2bf23EtGRExg4kL2BR/XWlY\\nCRvM1i75S4nmiseEuKD3IDSfgudoc+OySYUzD4XkfrEp9BXWh+wuekOcVxRz7dnJ\\nVvS6lqIbCGish1OIEXPt3ujac27Bvg==\\n=FvgP\\n-----END PGP MESSAGE-----\\n\",\n          \"pgp_fingerprint\": \"DEB727D7A6A88204E0A1DFA46D1B9830E7C73938\",\n          \"validator_index\": \"1627615\",\n          \"entity\": \"CustodianA.ClientB\",\n      },\n      ...\n  ]"}],"_postman_id":"d82848de-8f03-40ee-9bde-22867dffb26b"},{"name":"Broadcast pre-signed exit message","id":"66fb2d4a-8125-4b04-b08f-b6ea27799ed9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"message\": {\n    \"epoch\": \"100000000\", \n    \"validator_index\": \"123456\"\n  },\n  \"signature\": \"0xSIGNATURE\"\n}","options":{"raw":{"language":"json"}}},"url":"v2/staking/ethereum/messages/broadcast","description":"<p>This endpoint allows for the broadcast of a pre-signed exit message, as generated through <code>/v2/staking/ethereum/exit/messages</code>, to exit a validator. The contents to be broadcast is the decrypted version of the GET endpoint's output.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>epoch: The epoch that the message was signed, [integer], (mandatory)</p>\n</li>\n<li><p>validator_index: The index for the Ethereum validator that is to be exited, [integer], (mandatory)</p>\n</li>\n<li><p>signature: The BLS signature of the message as a hex string with a 0x prefix, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["staking","ethereum","messages","broadcast"],"host":["v2"],"query":[],"variable":[]}},"response":[{"id":"5216791e-2192-4129-a92f-b8cf7edd4277","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"message\": {\n    \"epoch\": \"100000000\", \n    \"validator_index\": \"123456\"\n  },\n  \"signature\": \"0xSIGNATURE\"\n}","options":{"raw":{"language":"json"}}},"url":"v2/staking/ethereum/messages/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"7c5ca17b-f128-4c6c-bdfe-15816cb0beba","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"message\": {\n    \"epoch\": \"100000000\", \n    \"validator_index\": \"123456\"\n  },\n  \"signature\": null\n}","options":{"raw":{"language":"json"}}},"url":"v2/staking/ethereum/messages/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"66fb2d4a-8125-4b04-b08f-b6ea27799ed9"},{"name":"Exit time","id":"712e225a-ee2c-4ba0-948b-4b8bd285da31","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"exit_date\": \"2025-07-25T20:00:00Z\",\n  \"validators\": [\"162791\", \"162792\", \"162793\"]\n}","options":{"raw":{"language":"json"}}},"url":"/v2/insights/ethereum/calculator/exit","description":"<p>This endpoint provides the current estimated exit time for validators on the Ethereum network or can provide specific exit timings for a given validator/s.</p>\n<p>For the current estimated time based on the number of validators already in the exit queue, no request parameters need to be provided.</p>\n<p>To understand the exit timings for a given validator/s either:</p>\n<ul>\n<li>the exit_date and validators must be provided: to see the optimal time to broadcast the exit message for this specific validator/s</li>\n</ul>\n<p>or</p>\n<ul>\n<li>exit_date, entity_filter and the validators must be provided: to see the optimal exit time and specific validator indexes to exit for a given number of validators within the given entity_filter.</li>\n</ul>\n<p>If no information is provided within the 'validators' section of the response then either the request was for the current estimated exit time or the specified validators cannot be existed within the given timeframe.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>exit_date: The ideal date the validator should be exited by in the format of <strong>YYYY-MM-DD HH:MM:SSZ</strong> e.g <code>2025-08-22 12:02:59</code>Z, [string], (optional)</p>\n<ul>\n<li><p>If no time is provided then the result will return the earliest possible exit time for the given validators</p>\n</li>\n<li><p>Exit timings can only be provided for a datetime up to 9 days into the future</p>\n</li>\n</ul>\n</li>\n<li><p>validators: An array of indexes for Ethereum validators e.g <code>[123456]</code>, list[string] [optional]</p>\n</li>\n<li><p>entity: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> that validators should be exited for e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p><code>validator_to_exit</code>: The number of validators to be exited e.g <code>300</code>, [numerical], (optional)</p>\n<ul>\n<li>If no value is provided and the entity_filter is given then all validator indexes within that entity_filter will be reviewed for exit</li>\n</ul>\n</li>\n</ul>\n<p>To Note:</p>\n<ul>\n<li>This endpoint will return <em>only</em> mainnet data</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>datetime</code> is the date and time for which calculation was done in YYYY-MM-DD HH:MM:SS format</p>\n</li>\n<li><p>where <code>queue_wait_time</code> is in the format of HH:MM and shows the time a validator would need to wait in the exit queue until it is fully exited</p>\n</li>\n<li><p>where <code>queue_size</code> is the number of ETH currently in the exit queue</p>\n</li>\n<li><p>where <code>churn_limit</code> is the number of ETH that can be exited per epoch</p>\n</li>\n<li><p>where <code>sweep_position</code> is the current position of the sweeper through the validator index list</p>\n</li>\n</ul>\n<p>The 'validators' section of the response contains information for the exit of specific validators:</p>\n<ul>\n<li><p>where <code>index</code> is a list of indexes for validators that can be exited in the given timeframe</p>\n</li>\n<li><p>where <code>exit_time</code> is the optimal time to broadcast the validator exit message by to minimise missed rewards whilst in the exit queue</p>\n</li>\n<li><p>where <code>withdrawal_time</code> is when the given validators will beciome fully exited, assuming the exit was broadcast by the specified <code>exit_time</code></p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","insights","ethereum","calculator","exit"],"query":[],"variable":[]}},"response":[{"id":"272cb170-ea46-4c3e-a401-81e81093ae60","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"/v2/insights/ethereum/calculator/exit"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"datetime\": \"2025-01-01 15:26:00\",\n\t\"queue_wait_time\": \"23:15\",\n\t\"queue_size\": 150,\n\t\"churn_limit\": 8,\n    \"sweep_position\": 997214\n    \"validators\": [\n    ]\n}"},{"id":"965bce34-be1b-428a-94b8-22e5107efc56","name":"Successful response - Estimate Copy","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"exit_date\": \"2025-07-25T20:00:00Z\",\n  \"validators\": [\"162791\"]\n}","options":{"raw":{"language":"json"}}},"url":"/v2/insights/{ETH}/calculator/activation"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"datetime\": \"2025-07-17T12:51:16.866505Z\",\n  \"queue_wait_time\": \"32:42\",\n  \"queue_size\": 78496,\n  \"churn_limit\": 256,\n  \"sweep_position\": 997214,\n  \"validators\": [\n    {\n      \"index\": 162791,\n      \"exit_time\": \"2025-07-20T16:16:17.866505Z\",\n      \"withdrawal_time\": \"2025-07-23T21:04:17.866505Z\"\n    }\n  ]\n}"}],"_postman_id":"712e225a-ee2c-4ba0-948b-4b8bd285da31"}],"id":"d631851a-15cc-4a4e-89b3-8ce76f237409","description":"<p>We provide two exit routes for Ethereum validators:</p>\n<p><strong>1. Consensus Layer</strong><br />Users provide a GPG key through the <code>/v2/staking/ethereum/exit/key</code> endpoint and then call <code>/v2/staking/ethereum/exit/message</code> to receive encrypted exit messages. These can be broadcast through your route of choice or via our <code>v2/staking/ethereum/messages/broadcast</code> endpoint.</p>\n<p><strong>2. Execution Layer</strong><br />Users create the unsigned transaction to exit the validators through the <code>/v2/staking/ethereum/validators/exit</code> endpoint. This must then be signed and can be broadcast through your own channel or through our <code>v2/staking/ethereum/broadcast</code> endpoint.</p>\n","_postman_id":"d631851a-15cc-4a4e-89b3-8ce76f237409","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Broadcast transaction","id":"ecb20603-21dc-4734-a9de-71e33068f3be","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"v2/staking/ethereum/broadcast","description":"<p>This endpoint will allow the broadcasting of transactions to both the Ethereum mainnet and the Hoodi testnet</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction hash, [string], (optional)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format or raw JSON format as within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: A list of signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n<li><p>delegator_address: The Ethereum address for the sender of the unsigned transaction, [string], (mandatory)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required.</p>\n<p>Any transactions received as a list e.g from the /switch, /exit, and /consolidate should be broadcast in nonce value order.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["staking","ethereum","broadcast"],"host":["v2"],"query":[],"variable":[]}},"response":[{"id":"c14d094c-9bd1-48c2-8c96-768a9c42a6f6","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"v2/staking/ethereum/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"a9936d48-e733-4e8b-9afa-7aad7b690fb9","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"v2/staking/ethereum/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"ecb20603-21dc-4734-a9de-71e33068f3be"}],"id":"f8b5a180-fc9d-4019-ae45-ffd76b81dd17","description":"<p>Staking and Reporting endpoints for ETH on the Ethereum blockchain</p>\n","_postman_id":"f8b5a180-fc9d-4019-ae45-ffd76b81dd17","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Injective","item":[{"name":"Validator address","id":"67ecab2d-2d21-478e-b85a-23f65c93c5a2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/INJ/validators","description":"<p>This endpoint provides the mainnet Twinstake Injective validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","INJ","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"adcff466-8e3c-4fbd-b57b-30823d8fc6c3","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/INJ/validators","host":[""],"path":["v2","staking","INJ","validators"],"query":[{"key":"asset","value":"INJ","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"injval...p2623y\",\n}"}],"_postman_id":"67ecab2d-2d21-478e-b85a-23f65c93c5a2"},{"name":"Rewards","id":"3e06a3f4-1675-4004-b056-321cae86d2f2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/injective/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Injective address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Injective validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","injective","rewards"],"query":[],"variable":[]}},"response":[{"id":"6d051514-19a0-4e68-9707-36ef19b59d3e","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/injective/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=inj12nmf...zrg2rmkdd2w&validators=injvaloper18cyc...xp3p2623y","path":["v2","reporting","injective","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"inj12nmf...zrg2rmkdd2w"},{"key":"validators","value":"injvaloper18cyc...xp3p2623y"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"inj12nmf...zrg2rmkdd2w\",\n\t    \"validator\": \"injvaloper18cyc...xp3p2623y\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 13.12,\n\t    \"apy\": 13.45,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 78.822370\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"3e06a3f4-1675-4004-b056-321cae86d2f2"},{"name":"Stakes","id":"b6bb3114-2da2-42af-8700-660d38601a0b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/injective/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Injective address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Injective validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in INJ that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","injective","stakes"],"query":[],"variable":[]}},"response":[{"id":"270c756a-8466-4a73-9462-fe906242fc66","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/injective/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=inj12nmf...zrg2rmkdd2w","path":["v2","reporting","injective","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"inj12nmf...zrg2rmkdd2w"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"inj12nmf...zrg2rmkdd2w\",\n\t    \"validator\": \"injvaloper18cyc...xp3p2623y\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 1342400,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"b6bb3114-2da2-42af-8700-660d38601a0b"},{"name":"Transactions","id":"a7a61f14-1e23-4d8b-9220-f5a0d1b253e3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/injective/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Injective for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Injective address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Injective validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","injective","transactions"],"query":[],"variable":[]}},"response":[{"id":"23bc602c-56bd-42ab-a936-2d2ca9b5ac53","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/injective/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","injective","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"inj12nmf...zrg2rmkdd2w\",\n\t    \"validator\": \"injvaloper18cyc...xp3p2623y\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 9205.81,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"a7a61f14-1e23-4d8b-9220-f5a0d1b253e3"},{"name":"Rewards (old)","id":"55496675-c26f-4817-a692-ff1b76abd2aa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"INJ\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/injective/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"23c18bd3-7f1e-496a-a949-f41471a92f52","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"INJ\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"INJ\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"55496675-c26f-4817-a692-ff1b76abd2aa"},{"name":"Staked position (old)","id":"7e6d680b-edb5-4ede-9af1-ea0a92b49e8e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"INJ\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/injective/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"8a28af00-1991-4295-8b55-216356cfa5d1","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"INJ\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"INJ\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"7e6d680b-edb5-4ede-9af1-ea0a92b49e8e"},{"name":"Transactions (old)","id":"4aadbf2f-817a-4aca-95a9-e7cb10a82696","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"INJ\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/injective/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"ee60ffb1-f0ef-496c-8be3-29b648ce7c27","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"INJ\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"INJ\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"480B06...20FB420\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://explorer.injective.network/transaction/480B06...20FB420/\"\n            },"}],"_postman_id":"4aadbf2f-817a-4aca-95a9-e7cb10a82696"},{"name":"Delegate","id":"6e872a62-1abc-4ed9-9701-15c1f7fea510","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"inj12nmf...zrg2rmkdd2w\",\n  \"validator_address\": \"injvaloper18cyc...xp3p2623y\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/injective/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation of assets to a Twinstake validator.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (mandatory). There is no minimum delegation amount on Injective.</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (optional). N.B this is required for an address with no transaction history.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","injective","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"8d66a31c-8bdc-4733-9bfe-5394770b489f","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"inj12nmf...zrg2rmkdd2w\",\n  \"validator_address\": \"injvaloper18cyc...xp3p2623y\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"6e872a62-1abc-4ed9-9701-15c1f7fea510"},{"name":"Claim rewards","id":"d519c01f-1d06-4017-b300-0c1e66c11287","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"inj12nmf...zrg2rmkdd2w\",\n  \"validator_address\": \"injvaloper18cyc...xp3p2623y\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/injective/rewards/claim","description":"<p>This endpoint is to claim the rewards from the Twinstake validator, for a given delegator address.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","injective","rewards","claim"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"51c972ce-edff-4458-b21c-fdc953cb5371","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"inj12nmf...zrg2rmkdd2w\",\n  \"validator_address\": \"injvaloper18cyc...xp3p2623y\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"d519c01f-1d06-4017-b300-0c1e66c11287"},{"name":"Undelegate","id":"3deebb6d-eb69-42c4-a804-7614e1326d86","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"inj12nmf...zrg2rmkdd2w\",\n  \"validator_address\": \"injvaloper18cyc...xp3p2623y\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/injective/undelegate","description":"<p>This endpoint is to create an unsigned undelegation transaction that can be broadcast to effect the undelegation of assets from a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (optional)</p>\n</li>\n<li><p>unstake_all: This allows the full amount to be undelegated without this being specifided, [boolean], (optional)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","injective","undelegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a692397f-e9e3-4d08-8d02-c3ef7837abc3","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"inj12nmf...zrg2rmkdd2w\",\n  \"validator_address\": \"injvaloper18cyc...xp3p2623y\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"3deebb6d-eb69-42c4-a804-7614e1326d86"},{"name":"Broadcast transaction","id":"0eb78e4f-4bfe-458a-b857-b0432ff15217","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/injective/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Injective blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction, [string], (optional)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: A list of signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","injective","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"08d753d9-fea6-40d2-bbb3-f77600609746","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/injective/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"2ac813a6-afa7-4873-9d25-06d2d165413b","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/injective/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"0eb78e4f-4bfe-458a-b857-b0432ff15217"},{"name":"Transaction status","id":"9d7dc4c7-028f-4d97-8530-8e04e03d32e6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/INJ/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","INJ","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"196b84e1-a0a1-466a-a2b9-4bd3a26eca5f","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/INJ/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","INJ","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"9d7dc4c7-028f-4d97-8530-8e04e03d32e6"}],"id":"d1f69776-c056-4104-9156-8231599290b6","description":"<p>Staking and Reporting endpoints for INJ on the Injective blockchain</p>\n","_postman_id":"d1f69776-c056-4104-9156-8231599290b6","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"IOTA","item":[{"name":"Validator address","id":"63ec97fe-5911-4618-b73d-e8396acc7425","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/IOTA/validators","description":"<p>This endpoint provides the mainnet Twinstake Iota validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","IOTA","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"f719322f-a04c-4756-a21e-95ec7ea46fd3","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/IOTA/validators","host":[""],"path":["v2","staking","IOTA","validators"],"query":[{"key":"asset","value":"IOTA","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"address\": \"0xab59b7...48eb36c6e\"\n    }\n]"}],"_postman_id":"63ec97fe-5911-4618-b73d-e8396acc7425"},{"name":"Rewards","id":"b15fc397-5e8b-484a-9cb9-3889cc208e56","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/iota/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Iota address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Iota validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","iota","rewards"],"query":[],"variable":[]}},"response":[{"id":"b66628b9-da0e-4ba6-93e3-9dc83ee63ddb","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/iota/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=0x123...XYZ&validators=0x789...ABC","path":["v2","reporting","iota","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"0x123...XYZ"},{"key":"validators","value":"0x789...ABC"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"0x123...XYZ\",\n\t    \"validator\": \"0x789...ABC\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 12.41,\n\t    \"apy\": 12.73,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 798.229181\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"b15fc397-5e8b-484a-9cb9-3889cc208e56"},{"name":"Stakes","id":"b6ccceef-66fc-4b14-858a-58a965d43fd5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/iota/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the IOTA address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake IOTA validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in IOTA that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","iota","stakes"],"query":[],"variable":[]}},"response":[{"id":"f6e2dbf0-2d80-4d69-b250-feddb5e3aa5f","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/iota/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=0x123...XYZ","path":["v2","reporting","iota","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"0x123...XYZ"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"0x123...XYZ\",\n\t    \"validator\": \"0x789...ABC\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 7482110,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"b6ccceef-66fc-4b14-858a-58a965d43fd5"},{"name":"Transactions","id":"287733d1-d633-4ed3-969b-2cf19475dfd3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/iota/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on IOTA for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the IOTA address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake IOTA validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","iota","transactions"],"query":[],"variable":[]}},"response":[{"id":"2fe9dd87-3334-4f00-ac93-0eaf2dc870f4","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/iota/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","iota","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"0x123...XYZ\",\n\t    \"validator\": \"0x789...ABC\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 8712.49,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"287733d1-d633-4ed3-969b-2cf19475dfd3"},{"name":"Rewards (old)","id":"2337432b-cdcf-4435-bc41-3776e5a4a45f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"IOTA\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/iota/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount, nanoton, of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"fde78fbf-f32a-46cc-b4da-fea4d1cecdc4","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"IOTA\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"IOTA\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"2337432b-cdcf-4435-bc41-3776e5a4a45f"},{"name":"Staked position (old)","id":"bdbc1a14-f70d-421d-9308-425a07b7fc59","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"IOTA\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/iota/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount in nanoton being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits, in nanoton, on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount, in nanoton, which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount, in nanoton, of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount, in nanoton, which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"c7090442-4c8a-4826-ba74-382db6501051","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"IOTA\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"IOTA\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"bdbc1a14-f70d-421d-9308-425a07b7fc59"},{"name":"Transactions (old)","id":"2b6b69f2-bf47-4fa0-91f3-5c81ab5deefc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"IOTA\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/iota/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"e6c7fc9b-1cb9-4ffa-bcdb-cd74299f6982","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"IOTA\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"IOTA\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"688a80...9ebd08f\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://tonscan.org/tx/688a80...9ebd08f\"\n            },"}],"_postman_id":"2b6b69f2-bf47-4fa0-91f3-5c81ab5deefc"},{"name":"Transaction status","id":"b17d9d76-ad63-4bbf-bb2a-72b4a3152c42","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/IOTA/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","IOTA","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"551d7f7e-300e-46c7-8940-506262327289","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/IOTA/status?transaction_hash=3cB2Nfu3z3YRT6GtEuaJZoQK8QNmVGddKCeNnmHYFRVi&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","IOTA","status"],"query":[{"key":"transaction_hash","value":"3cB2Nfu3z3YRT6GtEuaJZoQK8QNmVGddKCeNnmHYFRVi"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"3cB2Nfu3z3YRT6GtEuaJZoQK8QNmVGddKCeNnmHYFRVi\"\n\t\t\"status\": \"stake\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"b17d9d76-ad63-4bbf-bb2a-72b4a3152c42"}],"id":"9d51a46e-b18d-4a18-b820-6ff38aa8f55b","description":"<p>Staking and Reporting endpoints for IOTA on the IOTA Rebased blockchain</p>\n","_postman_id":"9d51a46e-b18d-4a18-b820-6ff38aa8f55b","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Mantra","item":[{"name":"Validator address","id":"23e0a444-fd99-4ec4-b569-d4a8543fc71c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/OM/validators","description":"<p>This endpoint provides the mainnet Twinstake Mantra validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","OM","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"f1ac037a-8a8e-4f10-811d-1a7b07326ee5","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/OM/validators","host":[""],"path":["v2","staking","OM","validators"],"query":[{"key":"asset","value":"OM","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"mantraval...6x44raus\",\n}"}],"_postman_id":"23e0a444-fd99-4ec4-b569-d4a8543fc71c"},{"name":"Rewards","id":"d4f8d6a8-29a9-4f4e-9100-b2f1619f80cb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/mantra/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Mantra address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Mantra validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where rewards is the inflation generated by the protocol</p>\n</li>\n<li><p>where pending_rewards is list of reward not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","mantra","rewards"],"query":[],"variable":[]}},"response":[{"id":"ab74cd01-d665-4c81-9896-26ab0937a986","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/mantra/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=mantra1fgc...h6ldf&validators=mantravaloper1s...04t6x44raus","path":["v2","reporting","mantra","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"mantra1fgc...h6ldf"},{"key":"validators","value":"mantravaloper1s...04t6x44raus"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"mantra1fgc...h6ldf\",\n\t    \"validator\": \"mantravaloper1s...04t6x44raus\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 17.10,\n\t    \"apy\": 17.86,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 990.122108\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"d4f8d6a8-29a9-4f4e-9100-b2f1619f80cb"},{"name":"Stakes","id":"824f9bb7-b9e4-4bfc-aa71-641c2c1e04ac","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/mantra/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Mantra address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Mantra validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in OM that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","mantra","stakes"],"query":[],"variable":[]}},"response":[{"id":"f828ff4a-a412-4c97-a3a2-c91ac60bf46a","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/mantra/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=mantra1fgc...h6ldf","path":["v2","reporting","mantra","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"mantra1fgc...h6ldf"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"mantra1fgc...h6ldf\",\n\t    \"validator\": \"mantravaloper1s...04t6x44raus\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 9910825,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"824f9bb7-b9e4-4bfc-aa71-641c2c1e04ac"},{"name":"Transactions","id":"595667b9-2196-4041-b83e-9cda0765a914","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/mantra/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Mantra for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Mantra address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Mantra validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","mantra","transactions"],"query":[],"variable":[]}},"response":[{"id":"d085bafc-8686-46d0-a69f-495718fd65ba","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/mantra/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","mantra","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"mantra1fgc...h6ldf\",\n\t    \"validator\": \"mantravaloper1s...04t6x44raus\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 5019.93,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"595667b9-2196-4041-b83e-9cda0765a914"},{"name":"Rewards (old)","id":"63c44533-0e8e-4b74-9f37-abe97ba46ffa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"OM\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/mantra/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"b6831254-7b65-42f1-953a-8bc0ef591d20","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OM\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"OM\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"63c44533-0e8e-4b74-9f37-abe97ba46ffa"},{"name":"Staked position (old)","id":"467cc188-c793-485d-ab07-523800261871","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OM\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/mantra/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"07dc9de6-5bcd-4caa-9564-65ef03a7545e","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OM\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"OM\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"467cc188-c793-485d-ab07-523800261871"},{"name":"Transactions (old)","id":"5caf0e04-e878-401f-94b4-f5defc7b1e75","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"OM\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/mantra/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a723f948-1842-4514-992c-a2ac52cd4a19","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OM\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"OM\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"7F23D5...C255471E\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://explorer.mantrachain.io/MANTRA-1/tx/7F23D5...C255471E\"\n            },"}],"_postman_id":"5caf0e04-e878-401f-94b4-f5defc7b1e75"},{"name":"Delegate","id":"1f9c818a-3c50-431c-9941-8ebc098f3a72","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"mantra1fgc...h6ldf\",\n  \"validator_address\": \"mantravaloper1s...04t6x44raus\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/mantra/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation of assets to a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (mandatory). There is 1 OM minimum delegation amount on Mantra.</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (optional). N.B this is required for an address with no transaction history.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","mantra","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"e6126c91-a2b7-4b7f-950e-df22818930c3","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"osmo1x0l...lnzsfpl\",\n  \"validator_address\": \"osmovaloper1cl...p88n0y4\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"1f9c818a-3c50-431c-9941-8ebc098f3a72"},{"name":"Claim rewards","id":"0db046ea-33a2-4ee9-8bd8-43f84482b754","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"mantra1fgc...h6ldf\",\n  \"validator_address\": \"mantravaloper1s...04t6x44raus\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/mantra/rewards/claim","description":"<p>This endpoint is to claim the rewards from the Twinstake validator, for a given delegator address.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","mantra","rewards","claim"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"257205dc-c361-452e-a03c-428d9abfdbf9","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"osmo1x0l...lnzsfpl\",\n  \"validator_address\": \"osmovaloper1cl...p88n0y4\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"0db046ea-33a2-4ee9-8bd8-43f84482b754"},{"name":"Undelegate","id":"d7d9a095-6fe4-4167-8a0e-ff7e5cf2c8b4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"mantra1fgc...h6ldf\",\n  \"validator_address\": \"mantravaloper1s...04t6x44raus\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/mantra/undelegate","description":"<p>This endpoint is to create an unsigned undelegation transaction that can be broadcast to effect the undelegation of assets from a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (optional)</p>\n</li>\n<li><p>unstake_all: This allows the full amount to be undelegated without this being specifided, [boolean], (optional)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","mantra","undelegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"dbe92260-f857-42e3-8662-e286c44900ee","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"osmo1x0l...lnzsfpl\",\n  \"validator_address\": \"osmovaloper1cl...p88n0y4\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"d7d9a095-6fe4-4167-8a0e-ff7e5cf2c8b4"},{"name":"Broadcast transaction","id":"3555d568-b238-4629-85e4-2bbb8719ca95","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/mantra/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Mantra blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction, [string], (optional)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: A list of signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","mantra","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"aaaaf58b-d729-496a-99ab-7db7c1858d9f","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/mantra/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"1c91f532-67e9-4729-ad00-6d4d28e421b3","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/mantra/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"3555d568-b238-4629-85e4-2bbb8719ca95"},{"name":"Transaction status","id":"82e32bd0-f4e1-4ada-8c34-cfaae25c184e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/OM/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","OM","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"8920ca4c-c027-46a7-a5b3-782412f7fd80","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/OM/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","OM","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"82e32bd0-f4e1-4ada-8c34-cfaae25c184e"}],"id":"37d2847f-e089-4cfe-9fba-dc95e7849025","description":"<p>Staking and Reporting endpoints for OM on the Mantra blockchain</p>\n","_postman_id":"37d2847f-e089-4cfe-9fba-dc95e7849025","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Near","item":[{"name":"Validator address","id":"b1eb77bc-75ac-4dbc-ad65-2ee39e8803be","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/NEAR/validators","description":"<p>This endpoint provides the mainnet Twinstake Near validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","NEAR","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"c71931a4-8ed6-4742-97a8-a27f06012ee6","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/NEAR/validators","host":[""],"path":["v2","staking","NEAR","validators"],"query":[{"key":"asset","value":"NEAR","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"twinstake...near\",\n}"}],"_postman_id":"b1eb77bc-75ac-4dbc-ad65-2ee39e8803be"},{"name":"Rewards","id":"24e0e941-cf3f-4ace-9c60-9a3f50ad5c2a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/near/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the NEAR address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake NEAR validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code>is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","near","rewards"],"query":[],"variable":[]}},"response":[{"id":"e3025209-6f90-47ed-85f2-0932cc820c08","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/near/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=fb9243ce...ft65h&validators=twins...near","path":["v2","reporting","near","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"fb9243ce...ft65h"},{"key":"validators","value":"twins...near"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"fb9243ce...ft65h\",\n\t    \"validator\": \"twins...near\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 10.77,\n\t    \"apy\": 11.31,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 332.271883\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"24e0e941-cf3f-4ace-9c60-9a3f50ad5c2a"},{"name":"Stakes","id":"5fe178bf-61f6-4cab-b08d-90e478db9e97","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/near/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the NEAR address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the NEAR validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in NEAR that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","near","stakes"],"query":[],"variable":[]}},"response":[{"id":"37f38420-5445-4c23-bff9-738e9d8985a4","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/near/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=fb9243ce...ft65h","path":["v2","reporting","near","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"fb9243ce...ft65h"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"fb9243ce...ft65h\",\n\t    \"validator\": \"twins...near\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 7261190,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"5fe178bf-61f6-4cab-b08d-90e478db9e97"},{"name":"Transactions","id":"248e8fec-e92a-40a5-a460-14bfb8afa5af","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/near/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on NEAR for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the NEAR address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake NEAR validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","near","transactions"],"query":[],"variable":[]}},"response":[{"id":"cef4b7ce-b40a-430c-bd31-31962afe89ea","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/near/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","near","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"fb9243ce...ft65h\",\n\t    \"validator\": \"twins...near\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 5739.14,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"248e8fec-e92a-40a5-a460-14bfb8afa5af"},{"name":"Rewards (old)","id":"a5e42b8a-33d9-4fc8-91c9-69949eadd2a4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"NEAR\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/near/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"10df5f3e-fa3f-444c-91b3-80aec9249a34","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"NEAR\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"NEAR\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"a5e42b8a-33d9-4fc8-91c9-69949eadd2a4"},{"name":"Staked position (old)","id":"df7b533a-054c-42ae-be6e-ea467d65b0e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"NEAR\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/near/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"51e07b4d-ccda-4b53-b8dc-4ac2a956fcc4","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"NEAR\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"NEAR\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"df7b533a-054c-42ae-be6e-ea467d65b0e2"},{"name":"Transactions (old)","id":"8457534e-19ce-4d43-8e86-7fbf7e6484d0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"NEAR\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/near/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"199ee925-698f-48c4-941a-a738ca3d3365","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"NEAR\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"NEAR\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"Gh4ccx1...Bk2PPMT\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://nearblocks.io/txns/Gh4ccx1...Bk2PPMT\"\n            },"}],"_postman_id":"8457534e-19ce-4d43-8e86-7fbf7e6484d0"},{"name":"Delegate","id":"ffaad3b4-f2a8-400d-8ae4-37316499f686","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"fb9243ce...ft65h\",\n  \"delegator_public_key\": \"CQLP1....JYhzfT\",\n  \"amount\": \"100\",\n  \"validator_address\": \"twins...near\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation from the delegator address to the Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: The crypto addresses which funds will be delegated from e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_public_key: The public key associated with the delegator address e.g <code>[CQLP1....JYhzfT]</code>, [string], (mandatory)</p>\n</li>\n<li><p>amount: The amount of NEAR which will be delegated [number], (mandatory).</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (madatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","near","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"abacd64b-7845-4051-a367-53cd6f6583f1","name":"Successful response","originalRequest":{"method":"POST","header":[],"url":"/v2/staking/near/delegate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"ffaad3b4-f2a8-400d-8ae4-37316499f686"},{"name":"Undelegate","id":"4a4612a4-272c-46ea-9cc4-4f3138d07ed7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"fb9243ce...ft65h\",\n  \"delegator_public_key\": \"CQLP1....JYhzfT\",\n  \"amount\": \"100\",\n  \"validator_address\": \"twins...near\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/undelegate","description":"<p>This endpoint is to create an unsigned undelegation transaction that can be broadcast to effect the undelegation of funds from the Twinstake validtaor. This must be followed by the /withdraw transaction.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_public_key: The public key associated with the delegator address e.g <code>[CQLP1....JYhzfT]</code>, [string], (mandatory)</p>\n</li>\n<li><p>amount: The amount of NEAR which will be undelegated [number], (mandatory).</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","near","undelegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"725e45e4-362f-4cc6-8730-87d35594754b","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"fb9243ce...ft65h\",\n  \"delegator_public_key\": \"CQLP1....JYhzfT\",\n  \"amount\": \"100\",\n  \"validator_address\": \"twins...near\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/undelegate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"4a4612a4-272c-46ea-9cc4-4f3138d07ed7"},{"name":"Withdrawal","id":"e2cca5f1-20de-4c2b-b690-1ccea0fbf0e3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"fb9243ce...ft65h\",\n  \"delegator_public_key\": \"CQLP1....JYhzfT\",\n  \"amount\": \"100\",\n  \"validator_address\": \"twins...near\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/withdraw","description":"<p>This endpoint is to create an unsigned withdraw transaction that can be broadcast to effect the withdrawal of undelegated funds back to the delegator address. Funds must first be undelegated through the /undelegate endpoint.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_public_key: The public key associated with the delegator address e.g <code>[CQLP1....JYhzfT]</code>, [string], (mandatory)</p>\n</li>\n<li><p>amount: The amount of NEAR which will be withdrawn [number], (mandatory).</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","near","withdraw"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"6c2f8145-3ace-4e19-846f-7b00869c54be","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"fb9243ce...ft65h\",\n  \"delegator_public_key\": \"CQLP1....JYhzfT\",\n  \"amount\": \"100\",\n  \"validator_address\": \"twins...near\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/withdraw"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"e2cca5f1-20de-4c2b-b690-1ccea0fbf0e3"},{"name":"Broadcast transaction","id":"e5d386ac-2902-469e-9d00-12d235387f21","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Near blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>signed_transaction: The signed version of the transaction, [string], (mandatory)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","near","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"f997afff-6fd0-482a-8c88-260fc132c0d8","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction_hash\": \"<string>\",\n  \"message\": \"<string>\"\n}"},{"id":"081987aa-260e-43e4-b7b8-f202c433173b","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/near/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"e5d386ac-2902-469e-9d00-12d235387f21"},{"name":"Transaction status","id":"81e3fae7-9407-465f-a18d-4589373c26e6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/NEAR/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","NEAR","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"e5f688e1-123e-4aaa-b8b6-70c73cd75217","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/NEAR/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","NEAR","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"81e3fae7-9407-465f-a18d-4589373c26e6"}],"id":"798b72e4-e0cc-4f18-b4f2-5f613f967e62","description":"<p>Staking and Reporting endpoints for NEAR on the Near blockchain</p>\n","_postman_id":"798b72e4-e0cc-4f18-b4f2-5f613f967e62","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Osmosis","item":[{"name":"Validator address","id":"b616cbb2-3f57-4200-8532-eb82c1026ccb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/OSMO/validators","description":"<p>This endpoint provides the mainnet Twinstake Osmosis validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","OSMO","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"42086cb8-e536-4327-a377-a5db9bec6577","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/OSMO/validators","host":[""],"path":["v2","staking","OSMO","validators"],"query":[{"key":"asset","value":"OSMO","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"osmoval...kqapgq6p\",\n}"}],"_postman_id":"b616cbb2-3f57-4200-8532-eb82c1026ccb"},{"name":"Rewards","id":"93a2b8b6-5f77-4f3f-8754-14b96a95cf7f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/osmosis/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Osmosis address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Osmosis validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","osmosis","rewards"],"query":[],"variable":[]}},"response":[{"id":"9b62c4cf-6470-4218-a254-728c2fc78429","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/osmosis/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=osmo160...kzza6c29&validators=osmovaloper1mhu...dfhz78j","path":["v2","reporting","osmosis","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"osmo160...kzza6c29"},{"key":"validators","value":"osmovaloper1mhu...dfhz78j"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"osmo160...kzza6c29\",\n\t    \"validator\": \"osmovaloper1mhu...dfhz78j\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 1.77,\n\t    \"apy\": 1.91,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 774.210087\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"93a2b8b6-5f77-4f3f-8754-14b96a95cf7f"},{"name":"Stakes","id":"24e84dae-9811-4122-b994-89edf6ba35d6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/osmosis/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Osmosis address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Osmosis validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in OSMO that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","osmosis","stakes"],"query":[],"variable":[]}},"response":[{"id":"926a8b30-3092-4e22-9688-7739c8fe57bb","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/osmosis/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=osmo160...kzza6c29","path":["v2","reporting","osmosis","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"osmo160...kzza6c29"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"osmo160...kzza6c29\",\n\t    \"validator\": \"osmovaloper1mhu...dfhz78j\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 7182656,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"24e84dae-9811-4122-b994-89edf6ba35d6"},{"name":"Transactions","id":"3ca1ab60-cdf5-4e63-82f1-a5d0cec3e2b9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/osmosis/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Osmosis for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Osmosis address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Osmosis validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","osmosis","transactions"],"query":[],"variable":[]}},"response":[{"id":"e8ba7246-c4d7-47f5-8ef0-2f42b764cfcb","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/osmosis/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","osmosis","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"osmo160...kzza6c29\",\n\t    \"validator\": \"osmovaloper1mhu...dfhz78j\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 6740.41,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"3ca1ab60-cdf5-4e63-82f1-a5d0cec3e2b9"},{"name":"Rewards (old)","id":"d5446030-76d9-4f1a-8e75-6fd5bf1e86ef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"OSMO\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/osmosis/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"67f2aede-349b-4af8-b25f-b5c1b3768203","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OSMO\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"OSMO\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"d5446030-76d9-4f1a-8e75-6fd5bf1e86ef"},{"name":"Staked position (old)","id":"b1e8bcbf-01d3-4ab6-b596-43642c3d7d19","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OSMO\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/osmosis/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"da7dc028-7903-4a15-adef-b50eb12a1750","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OSMO\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"OSMO\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"b1e8bcbf-01d3-4ab6-b596-43642c3d7d19"},{"name":"Transactions (old)","id":"0ca74adf-59eb-430e-b31e-fa17a10aadec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"OSMO\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/osmosis/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"b2aa74b5-eeea-4ecd-a571-4cc2dc0f8301","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"OSMO\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"OSMO\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"A2E97...33DC45A\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://www.mintscan.io/osmosis/tx/A2E97D1...833DC45A?height=25555449\"\n            },"}],"_postman_id":"0ca74adf-59eb-430e-b31e-fa17a10aadec"},{"name":"Delegate","id":"7b794f41-9ace-4f64-a92d-4f73f645fc8b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"osmo160...kzza6c29\",\n  \"validator_address\": \"osmovaloper1mhu...dfhz78j\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/osmosis/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation of assets to a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (mandatory). There is no minimum delegation amount on Osmosis.</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (optional). N.B this is required for an address with no transaction history.</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","osmosis","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"bef9e3f3-efa1-4300-89cb-56a4c9ce8da2","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"osmo1x0l...lnzsfpl\",\n  \"validator_address\": \"osmovaloper1cl...p88n0y4\",\n  \"amount\": 1234567,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"7b794f41-9ace-4f64-a92d-4f73f645fc8b"},{"name":"Claim rewards","id":"78050b33-506a-42b0-8d0b-b90bd49b6a28","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/osmosis/rewards/claim","description":"<p>This endpoint is to claim the rewards from the Twinstake validator, for a given delegator address.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","osmosis","rewards","claim"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"00329f4b-4d12-40c7-8cfb-a6aa32527e39","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"osmo1x0l...lnzsfpl\",\n  \"validator_address\": \"osmovaloper1cl...p88n0y4\",\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"78050b33-506a-42b0-8d0b-b90bd49b6a28"},{"name":"Undelegate","id":"d58b569d-c2b5-415e-b459-319809599498","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"celestia160...kzza6c29\",\n  \"validator_address\": \"celestiavaloper1mhu...dfhz78j\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/osmosis/undelegate","description":"<p>This endpoint is to create an unsigned undelegation transaction that can be broadcast to effect the undelegation of assets from a Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (mandatory)</p>\n</li>\n<li><p>delegator_address: The crypto address which is/will delegated funds to a Twinstake validator e.g <code>\"0x123....xyz\"</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount to delegate, [number], (optional)</p>\n</li>\n<li><p>unstake_all: This allows the full amount to be undelegated without this being specifided, [boolean], (optional)</p>\n</li>\n<li><p>delegator_address_pubkey: The public key for the associated delegator address, [string], (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format,</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","osmosis","undelegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"d301d651-891f-4054-bf0e-c5e610a92169","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"delegator_address\": \"osmo1x0l...lnzsfpl\",\n  \"validator_address\": \"osmovaloper1cl...p88n0y4\",\n  \"amount\": 1234567,\n  \"unstake_all\": true,\n  \"delegator_address_pubkey\": \"DMEMMj...WtB+smuIA=\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"string\",\n        \"hex\": \"string\"\n    }\n}"}],"_postman_id":"d58b569d-c2b5-415e-b459-319809599498"},{"name":"Broadcast transaction","id":"b410bd29-e478-4216-90e7-acf61acafe91","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/osmosis/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Osmosis blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>signed_transaction: The signed version of the transaction, [string], (optional)</p>\n</li>\n<li><p>unsigned_transaction: The unsigned version of the transaction as represented in the hex format within the response of the /delegate endpoint , [string], (optional)</p>\n</li>\n<li><p>signatures: A list of signatures applied to the unsigned transaction, [string] (optional)</p>\n</li>\n</ul>\n<p>N.B one of <code>signed_transaction</code> or (<code>unsigned_transaction</code> &amp; <code>signatures</code>) is required</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>status</code> is \"broadcasted\" when the transaction has been successfully broadcast on the chain or \"failed\" if this has been unable to successfully broadcast on chain.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","osmosis","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"c86636af-b1d0-4e40-b94f-f3e66daa38aa","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/osmosis/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_hash\": \"string\",\n    \"status\": \"broadcasted\",\n    \"message\": \"string\"\n}"},{"id":"af2ee07c-d053-4f11-b384-4770ea088b2b","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\",\n  \"unsigned_transaction\": \"string\",\n  \"signatures\": []\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/osmosis/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"b410bd29-e478-4216-90e7-acf61acafe91"},{"name":"Transaction status","id":"03f056ad-16a0-43f2-a68b-4b4a2fc1c150","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/OSMO/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","OSMO","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"1f98bc0c-8d95-4d8a-b9e1-acdaf47514c3","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/OSMO/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","OSMO","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"03f056ad-16a0-43f2-a68b-4b4a2fc1c150"}],"id":"d2823007-2031-46ef-a855-bd16c3fc3500","description":"<p>Staking and Reporting endpoints for OSMO on the Osmosis blockchain</p>\n","_postman_id":"d2823007-2031-46ef-a855-bd16c3fc3500","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Polygon","item":[{"name":"Validator address","id":"4a8226d6-768c-46d7-9e95-f5e10f3f650a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/POL/validators","description":"<p>This endpoint provides the mainnet Twinstake Polygon validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","POL","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"ba4e63f1-2cbc-4b48-a3ca-d0bc91e4b137","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/POL/validators","host":[""],"path":["v2","staking","POL","validators"],"query":[{"key":"asset","value":"POL","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"0xeA0...F84712\",\n}"}],"_postman_id":"4a8226d6-768c-46d7-9e95-f5e10f3f650a"},{"name":"Rewards","id":"7d02b461-9d1c-44b2-adaa-56218e2478d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/polygon/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Polygon address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Polygon validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","polygon","rewards"],"query":[],"variable":[]}},"response":[{"id":"78ef2c20-8635-498b-859d-6c93e7bf7922","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/polygon/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=0xa43a...8987ed&validators=0xeA077...F84712","path":["v2","reporting","polygon","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"0xa43a...8987ed"},{"key":"validators","value":"0xeA077...F84712"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"0xa43a...8987ed\",\n\t    \"validator\": \"0xeA077...F84712\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 3.01,\n\t    \"apy\": 3.13,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 871.187220\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"7d02b461-9d1c-44b2-adaa-56218e2478d7"},{"name":"Stakes","id":"ae412428-436c-4a2e-b272-c32a6832a2cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/polygon/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Polygon address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Polygon validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in MATIC that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","polygon","stakes"],"query":[],"variable":[]}},"response":[{"id":"59480d9a-7dc7-4573-bd3c-821f6b404460","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/polygon/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=0xa43a...8987ed","path":["v2","reporting","polygon","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"0xa43a...8987ed"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"0xa43a...8987ed\",\n\t    \"validator\": \"0xeA077...F84712\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 7716209,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"ae412428-436c-4a2e-b272-c32a6832a2cd"},{"name":"Transactions","id":"a3bca57d-a265-487f-b152-76b03be9d948","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/polygon/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Polygon for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Polygon address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Polygon validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","polygon","transactions"],"query":[],"variable":[]}},"response":[{"id":"68a38de5-841f-42b4-931f-cf7f5996c63c","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/polygon/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","polygon","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"0xa43a...8987ed\",\n\t    \"validator\": \"0xeA077...F84712\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 5305.15,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"a3bca57d-a265-487f-b152-76b03be9d948"},{"name":"Rewards","id":"eb3e81b6-9233-4266-9476-06de265aa9ee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"POL\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/polygon/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a57fcf23-1c5e-424a-bc8f-cd7405752ced","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"POL\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"POL\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"eb3e81b6-9233-4266-9476-06de265aa9ee"},{"name":"Staked position","id":"6e31c92e-c7ec-4009-a65d-3e2333c95c3d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"POL\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/polygon/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"541c2ded-ec50-4dd6-b4f2-ae0cc981eadb","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"POL\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"POL\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"6e31c92e-c7ec-4009-a65d-3e2333c95c3d"},{"name":"Transactions","id":"5d560e72-0163-46a6-a95a-15bddb49d920","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"POL\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/polygon/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"39da58e6-22f7-4d9f-985f-a1b982e7e8ab","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"POL\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"POL\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"0x7fd0...c1e31e\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://polygonscan.com/tx/0x7fd...c1e31e\"\n            },"}],"_postman_id":"5d560e72-0163-46a6-a95a-15bddb49d920"},{"name":"Allowance","id":"082e8f33-fc2d-4f62-ac28-6aebe8a30318","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/allowance","description":"<p>This endpoint is to create an unsigned allowance transaction that can be broadcast on the Ethereum blockchain to authorize the Polygon staking contract to access POL assets for staking. This is part 1 of a 2 stage process and the /delegate transaction must be called next to effect the staking activity.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount of POL which will be delegated [number], (mandatory).</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","polygon","allowance"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"b2a6a67b-ea9d-4b0c-91fb-d2d338d0f32b","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/allowance"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    }\n}"}],"_postman_id":"082e8f33-fc2d-4f62-ac28-6aebe8a30318"},{"name":"Delegate","id":"deecfba5-d315-49c7-99e9-aa9a1416135e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast on the Polygon blockchain to stake the approved POL tokens. This is part 2 of a 2 stage process and the /allowance transaction must be called first to ensure the POL tokens are ringfenced for staking on the Ethereum blockchain.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount of POL which will be delegated [number], (mandatory).</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","polygon","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"8e2805b4-7334-4095-ab03-b81cb55237b3","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/delegate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    }\n}"}],"_postman_id":"deecfba5-d315-49c7-99e9-aa9a1416135e"},{"name":"Unbond","id":"a16acc7c-9860-47fc-b9f1-a6dfad9129e1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/unbond","description":"<p>This endpoint is to create an unsigned unbond transaction that can be broadcast to start the unstaking process of POL tokens from the Twinstake validator to the delegator's account. This is part 1 of a 2 stage process and the /unbond_claim endpoint mut be called next to complete the unstaking activity.</p>\n<p>This transaction must be broadcast on the Ethereum blockchain.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be undelegated from e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n<li><p>amount: The amount of POL which will be undelegated [number], (mandatory).</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","polygon","unbond"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"ea8451a5-d00d-42bd-9fbc-01298e40f734","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n  \"amount\": \"10000\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/unbond"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    }\n}"}],"_postman_id":"a16acc7c-9860-47fc-b9f1-a6dfad9129e1"},{"name":"Unbond claim","id":"8b37b797-74aa-48c2-836c-b9a4b80f6f7b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/unbond_claim","description":"<p>This endpoint is to create an unsigned unbond claim transaction that can be broadcast to complete the unstaking process of POL tokens from the Twinstake validator to the delegator's account. This is part 2 of a 2 stage process and the /unbond endpoint mut be called first to initiate the unstaking process.</p>\n<p>This transaction must be broadcast on the Ethereum blockchain.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be undelegated from e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","polygon","unbond_claim"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"31e54dcb-a912-4d4b-9cb0-f8450f68a1a0","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/unbond_claim"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    }\n}"}],"_postman_id":"8b37b797-74aa-48c2-836c-b9a4b80f6f7b"},{"name":"Claim rewards","id":"54912e28-ad8a-447f-886a-6f06e927e23e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/claim_rewards","description":"<p>This endpoint is to create an unsigned reward claim transaction to redeem the accumulated staking rewards for the delegator account.</p>\n<p>This transaction must be broadcast on the Ethereum blockchain.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","polygon","claim_rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"fcc2972e-3e52-42d6-8b34-5bc6fbc73d47","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"0xa43a...8987ed\",\n  \"validator_address\": \"0xeA077...F84712\",\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/claim_rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    }\n}"}],"_postman_id":"54912e28-ad8a-447f-886a-6f06e927e23e"},{"name":"Broadcast transaction","id":"19e21d81-958d-418f-af62-3f8e470ee7c9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Aptos blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>signed_transaction: The signed version of the transaction, [string], (mandatory)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","polygon","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"358e6fe6-6f98-4018-b2b9-66ba97b1d3c3","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction_hash\": \"<string>\",\n  \"message\": \"<string>\"\n}"},{"id":"f3635cdc-5337-42f4-a8f8-b2783e8fc3b4","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/polygon/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"19e21d81-958d-418f-af62-3f8e470ee7c9"},{"name":"Transaction status","id":"c120e046-d2f5-466e-991b-03ad3ef55cc5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/POL/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","POL","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"71fe87bb-77e2-4d50-aad7-20a99aae7c2c","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/POL/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","POL","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"c120e046-d2f5-466e-991b-03ad3ef55cc5"}],"id":"1f909d00-2ec3-4c8c-9d3d-9a9c3a5eb1bb","description":"<p>Staking and Reporting endpoints for POL on the Polygon blockchain</p>\n","_postman_id":"1f909d00-2ec3-4c8c-9d3d-9a9c3a5eb1bb","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Solana","item":[{"name":"Reporting","item":[{"name":"Validator address","id":"6ee69797-a431-4bc9-98fe-2717da7dc766","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/SOL/validators","description":"<p>This endpoint provides the mainnet Twinstake Solana validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","SOL","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"6176ae7b-d42f-4051-9022-caaa3ce2abca","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/SOL/validators","host":[""],"path":["v2","staking","SOL","validators"],"query":[{"key":"asset","value":"SOL","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"address\": \"Ak5BJ...rfiqR\",\n}"}],"_postman_id":"6ee69797-a431-4bc9-98fe-2717da7dc766"},{"name":"Rewards","id":"af17d105-e480-45c5-915e-0654761ecb65","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/solana/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Solana address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Solana validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is a list of rewards:</p>\n<ul>\n<li><p>where <code>inflation</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>MEV</code> is the total maximal extractable value from transaction fees</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>pending rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","solana","rewards"],"query":[],"variable":[]}},"response":[{"id":"54b92d6e-c068-40f9-b60a-df9e26fd11a1","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/solana/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=So11...RNu9x&validators=Ak5B...rfiqR","path":["v2","reporting","solana","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"So11...RNu9x"},{"key":"validators","value":"Ak5B...rfiqR"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"So11...RNu9x\",\n\t    \"validator\": \"Ak5B...rfiqR\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 6.59,\n\t    \"apy\": 6.80,\n\t    \"rewards\": {\n                \"INFLATION\": 0.067825083,\n                \"MEV\": 0.002528951\n            },\n            \"pending_rewards\": []\n        },\n    ...\n  ]\n}"}],"_postman_id":"af17d105-e480-45c5-915e-0654761ecb65"},{"name":"Stakes","id":"2917ec1d-6f96-45b0-832a-b1c26d39d292","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/solana/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the Solana address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Solana validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in SOL that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","solana","stakes"],"query":[],"variable":[]}},"response":[{"id":"439db352-6348-40c2-8989-5d98665178d4","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/solana/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=So11...RNu9x","path":["v2","reporting","solana","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"So11...RNu9x"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"So11...RNu9x\",\n\t    \"validator\": \"Ak5B...rfiqR\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 3230489,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"2917ec1d-6f96-45b0-832a-b1c26d39d292"},{"name":"Transactions","id":"86bf2ba8-f133-4721-a405-f62698245cc4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/solana/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on Solana for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the Solana address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake Solana validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","solana","transactions"],"query":[],"variable":[]}},"response":[{"id":"3b695c1f-8e39-4417-a2b0-d8289876bf3b","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/solana/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","solana","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"So11...RNu9x\",\n\t    \"validator\": \"HN7c...YWrH\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 7805.99,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"86bf2ba8-f133-4721-a405-f62698245cc4"},{"name":"Rewards (old)","id":"7e0546bf-369e-4d71-bd82-6f4ac84a08fa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"SOL\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CUSTODIANX.CLIENTY\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/solana/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n<li><p>where <code>jito_pending_distribution</code> is whether the Solana JITO rewards are awaiting the epoch to end in order to be paid out.</p>\n</li>\n<li><p>where <code>staking_rewards</code> are the protocol rewards.</p>\n</li>\n<li><p>where <code>jito_rewards</code> are the JITO specific rewards.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a60a1800-3f34-477f-a226-5e56c052147d","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"SOL\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"SOL\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402,\n                    \"jito_pending_distribution\": false,\n                    \"staking_rewards\": 53.011808,\n                    \"jito_rewards\": 6.736603049\n        }\n]}"}],"_postman_id":"7e0546bf-369e-4d71-bd82-6f4ac84a08fa"},{"name":"Staked position (old)","id":"87d16c99-31a4-4d2c-af4d-863f49fee95e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"SOL\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/solana/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"dcf6d92b-cde3-4894-b317-985078622af0","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"SOL\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"SOL\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"87d16c99-31a4-4d2c-af4d-863f49fee95e"},{"name":"Transactions (old)","id":"a898d3d4-cf94-48e9-a1eb-313f6081b096","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"SOL\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/solana/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"518d7439-a071-47f7-bb5c-42d689dac9a8","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"SOL\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"SOL\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"35LaYpBk9yy43qa9MS5h2hSt3YbejUHc2sebJZcjcTwTKmPURn3Egcykr8VYkNrR7R9Mk55XNG6EZZ2gKH8PQrSV\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://solanabeach.io/transaction/35LaYpBk9yy43qa9MS5h2hSt3YbejUHc2sebJZcjcTwTKmPURn3Egcykr8VYkNrR7R9Mk55XNG6EZZ2gKH8PQrSV\"\n            },"}],"_postman_id":"a898d3d4-cf94-48e9-a1eb-313f6081b096"}],"id":"7ee36fb9-c0eb-41d2-b15f-c4244b710a48","_postman_id":"7ee36fb9-c0eb-41d2-b15f-c4244b710a48","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Staking","item":[{"name":"Create stake account","id":"1b2f457b-307d-4af6-af34-8d145b414cee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_authority_address\": \"HN7c...YWrH\",\n  \"withdraw_authority_address\": \"8PjJ...Sjkq\",\n  \"amount\": \"100\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/create-stake-account","description":"<p>This endpoint is to create an unsigned create stake account transaction that can be broadcast to effect the creation of a stake account that funds can be delegated to Twinstake from.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>stake_authority_address: A cryptocurrency address on Solana that is used to sign staking related transactions e.g <code>[HN7c...YWrH]</code>, [string], (mandatory)</p>\n</li>\n<li><p>withdraw_authority_address: A cryptocurrency address on Solana that is used to sign withdrawal related transactions e.g <code>[8PjJ...Sjkq]</code>, [string], (mandatory)</p>\n</li>\n<li><p>amount: The amount of SOL which will fund the stake account and be delegated [number], (mandatory).</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (madatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n<p>In addition the following is provided in the response:</p>\n<ul>\n<li>where <code>stake_account_address</code> is the new Solana stake account that will be created from the transaction</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","solana","create-stake-account"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"6688ba51-e91b-4091-944a-47b0c1ff763d","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_authority_address\": \"HN7c...YWrH\",\n  \"withdraw_authority_address\": \"8PjJ...Sjkq\",\n  \"amount\": \"100\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/create-stake-account"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  },\n  \"stake_account_address\": \"<string>\"\n}"}],"_postman_id":"1b2f457b-307d-4af6-af34-8d145b414cee"},{"name":"Delegate","id":"ecfb01fb-04ae-4eb8-a488-cb0e05219116","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/delegate","description":"<p>This endpoint is to create an unsigned delegation transaction that can be broadcast to effect the delegation from the stake account to the Twinstake validator.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>stake_account_address: A cryptocurrency address on Solana that is used to delegate funds to a validator e.g <code>[HN7c...YWrH]</code>, [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds will be delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","solana","delegate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"d8392312-2778-4680-a1ad-4c7e23b6041f","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/delegate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    }\n}"}],"_postman_id":"ecfb01fb-04ae-4eb8-a488-cb0e05219116"},{"name":"Split stake","id":"4b3f4988-5f73-472c-86a9-40a697df10f7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"amount\": \"100\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/split-stake","description":"<p>This endpoint is to create an unsigned split stake transaction that can be broadcast to effect the splitting of stake from a Solana account into two accounts.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>stake_account_address: A cryptocurrency address on Solana that is used to delegate funds to a validator e.g <code>[HN7c...YWrH]</code>, [string], (mandatory)</p>\n</li>\n<li><p>amount: The amount of SOL to split off into the new stake account [number], (mandatory). This must be above 0.01 SOL and the remaining amount in both accounts must be above the rent exempt: <a href=\"https://solana.com/docs/core/fees#rent-exempt\">https://solana.com/docs/core/fees#rent-exempt</a></p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n<p>In addition the following is provided in the response:</p>\n<ul>\n<li>where <code>new_stake_account</code> is the new Solana stake account that will be created from the transaction</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","solana","split-stake"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"678a0cc0-76b1-4757-9be6-23c0eaeccffc","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"amount\": \"100\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/split-stake"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": {\n        \"raw\": {},\n        \"hash\": \"<string>\",\n        \"hex\": \"<string>\"\n    },\n    \"new_stake_account_address\": \"<string>\"\n}"}],"_postman_id":"4b3f4988-5f73-472c-86a9-40a697df10f7"},{"name":"Merge stake","id":"c4e23b79-3a90-4772-bdb6-aeecfd247db5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_source_address\": \"HN7c...YWrH\",\n  \"stake_account_target_address\": \"9QgXq...oXDk\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/merge-stake","description":"<p>This endpoint is to create an unsigned merge stake transaction that can be broadcast to effect the merging of stake from two Solana accounts into one account.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>stake_account_source_address: The Solana stake account that funds will be merged in from e.g <code>[HN7c...YWrH]</code>, [string], (mandatory)</p>\n</li>\n<li><p>stake_account_target_address: The Solana stake account that the funds will be merged into e.g <code>[9QgXq...oXDk]</code>, [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","solana","merge-stake"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"fc99aa03-a2e8-4233-8bab-e407d0148cd2","name":"Provide information to create a merge stake transaction","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_source_address\": \"HN7c...YWrH\",\n  \"stake_account_target_address\": \"9QgXq...oXDk\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/merge-stake"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"c4e23b79-3a90-4772-bdb6-aeecfd247db5"},{"name":"Activation time","id":"c5b1aff1-cfe1-40e8-97b8-12e8488639b3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"next_epochs\": int\n}","options":{"raw":{"language":"json"}}},"url":"/v2/insights/solana/calculator/activation","description":"<p>This endpoint provides information about the start and end time of the current and next epochs to help optimise any delegation activation timing.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>next_epochs: Whether the activation will be broadcast in this or the next epoch. 0 estimates an activation within the current epoch; 1 estimates an activation in the next epoch [binary], (optional)</li>\n</ul>\n<p>To Note:</p>\n<ul>\n<li><p>if next_epochs is not provided then the response section for next_epochs returns as default response of empty fields</p>\n</li>\n<li><p>This endpoint will return mainnet <em>and</em> testnet data</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>datetime</code> is the datetime (in UTC) of calculation request</p>\n</li>\n<li><p>where <code>previous_epoch</code> is the data object containing information about last completed epoch:</p>\n<ul>\n<li><p>where <code>id</code> is the number for the previous epoch</p>\n</li>\n<li><p>where <code>start_time</code> is the datetime (in UTC) when the last completed epoch started</p>\n</li>\n<li><p>where <code>end_time</code> is the datetime (in UTC) when the last completed epoch ended</p>\n</li>\n<li><p>where <code>slot_time</code> is the average time (in milliseconds) of slot for the last completed epoch</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>current_epoch</code> is the data object containing information about current epoch:</p>\n<ul>\n<li><p>where <code>id</code> is the number of the current epoch</p>\n</li>\n<li><p>where <code>start_time</code> is the datetime (in UTC) when the current epoch started</p>\n</li>\n<li><p>where <code>end_time</code> is the estimated datetime (in UTC) of when the current epoch will end</p>\n</li>\n<li><p>where <code>transaction_earliest_time</code> is the suggested earliest time (in UTC) to broadcast a delegation for activation in the next epoch. This field is relevant where next_epochs=0</p>\n</li>\n<li><p>where <code>transaction_latest_time</code>is the suggested latest time (in UTC) to broadcast a delegation for activation in the next epoch. This field is relevant where next_epochs=0</p>\n</li>\n</ul>\n</li>\n<li><p>where next_epochs is the data object containing information about the next unstarted epoch:</p>\n<ul>\n<li><p>where <code>id</code> is the number of the next epoch</p>\n</li>\n<li><p>where <code>start_time</code> is the estimated datetime (in UTC) for when the next epoch will start.</p>\n</li>\n<li><p>where <code>end_time</code> is the estimated datetime (in UTC) for when the next epoch will end.</p>\n</li>\n<li><p>where <code>transaction_earliest_time</code> is the suggested earliest time (in UTC) to broadcast a delegation in the next epoch for activation in the epoch after that. This field is relevant where next_epochs=1.</p>\n</li>\n<li><p>where <code>transaction_latest_time</code> is the suggested latest time (in UTC) to broadcast a delegation in the next epoch for activation in the epoch after that This field is relevant where next_epochs=1.</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","insights","solana","calculator","activation"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"73bca5c2-0dba-4a45-a9cf-f863e39b51a8","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"/v2/insights/solana/calculator/activation"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"datetime\": \"2025-10-06 11:51:01\",\n  \"previous_epoch\": {\n    \"id\": 100,\n    \"start_time\": \"2025-10-03 09:59:55\",\n    \"end_time\": \"2025-10-05 09:59:55\",\n    \"slot_time\": 410,\n  },\n  \"current_epoch\": {\n    \"id\": 101,\n    \"start_time\": \"2025-10-05 09:59:55\",\n    \"end_time\": \"2025-10-07 09:59:55\",\n    \"transaction_earliest_time\": \"2025-10-06 11:51:01\",\n    \"transaction_latest_time\": \"2025-10-07 08:59:55\"\n  },\n  \"next_epochs\": [\n\t  {\n\t    \"id\": 102,\n\t    \"start_time\": \"2025-10-07 09:59:55\",\n\t    \"end_time\": \"2025-10-09 09:59:55\",\n\t    \"transaction_earliest_time\": \"2025-10-07 10:59:55\",\n\t    \"transaction_latest_time\": \"2025-10-09 08:59:55\"\n\t  }\n  ]\n}"}],"_postman_id":"c5b1aff1-cfe1-40e8-97b8-12e8488639b3"}],"id":"3ac886ab-eb9f-487f-90c4-a599cd5c61f8","_postman_id":"3ac886ab-eb9f-487f-90c4-a599cd5c61f8","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Unstaking","item":[{"name":"Deactivate","id":"acf12954-3165-4489-aa01-95b161f24ec1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/deactivate","description":"<p>This endpoint is to create an unsigned deactivate transaction that can be broadcast to effect the start of the undelegation process for the funds. After the required cool down period, funds can be withdrawn back to the stake account via the /withdraw endpoint.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>stake_account_address: A cryptocurrency address on Solana that is used to delegate funds to a validator e.g <code>[HN7c...YWrH]</code>, [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","solana","deactivate"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"6327b14a-f016-4ea9-ad4e-55019dc0412b","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/deactivate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"acf12954-3165-4489-aa01-95b161f24ec1"},{"name":"Withdrawal","id":"2106d79a-8346-4396-8ba5-008062cd40cc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/withdraw","description":"<p>This endpoint is to create an unsigned withdraw transaction that can be broadcast to effect the withdrawal of deactivated funds back to the stake account. Funds must first be deactivated through the /deactivate endpoint.</p>\n<p>For further information on the delegation and undelegation process please read the protocol's staking guide: <a href=\"https://www.twinstake.io/resources/staking-guides\">https://www.twinstake.io/resources/staking-guides</a></p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A crypto addresses which has staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (mandatory)</p>\n</li>\n<li><p>stake_account_address: A cryptocurrency address on Solana that is used to delegate funds to a validator e.g <code>[HN7c...YWrH]</code>, [string], (mandatory)</p>\n</li>\n<li><p>validator_address: The Twinstake validator address that funds are delegated to e.g <code>[0x123...xyz]</code>, [string] (mandatory)</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<p>The response is an unsigned transaction in three formats, raw, hash and hex.</p>\n<ul>\n<li><p>where <code>raw</code> is the unsigned transaction in its raw JSON format. This shows the information which had been used to generate the transaction.</p>\n</li>\n<li><p>where <code>hash</code> is the unsigned transaction as a unique cryptographic identifier for the transaction. This can be used for raw signing processes in MPC wallets.</p>\n</li>\n<li><p>where <code>hex</code> is the unsigned transaction in hexadecimal-encoded format.This can be used to broadcast the delegation.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","solana","withdraw"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"b7f8b6f1-64f3-4593-ba98-3d6744a200a0","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"entity_filter\": \"CUSTODIANX.CLIENTY\",\n  \"delegator_address\": \"So11...RNu9x\",\n  \"stake_account_address\": \"HN7c...YWrH\",\n  \"validator_address\": \"Ak5B...rfiqR\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/withdraw"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction\": {\n    \"raw\": {},\n    \"hash\": \"<string>\",\n    \"hex\": \"<string>\"\n  }\n}"}],"_postman_id":"2106d79a-8346-4396-8ba5-008062cd40cc"},{"name":"Exit time","id":"064838c2-f891-4342-a855-1d11d77d032a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"next_epochs\": int\n}","options":{"raw":{"language":"json"}}},"url":"/v2/insights/solana/calculator/exit","description":"<p>This endpoint provides information about the start and end time of the current and next epochs to help optimise any unstaking exit timing.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>next_epochs: Whether the activation will be broadcast in this or the next epoch. 0 estimates an activation within the current epoch; 1 estimates an activation in the next epoch [binary], (optional)</li>\n</ul>\n<p>To Note:</p>\n<ul>\n<li><p>if next_epochs is not provided then the response section for next_epochs returns as default response of empty fields</p>\n</li>\n<li><p>This endpoint will return mainnet <em>and</em> testnet data</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>datetime</code> is the datetime (in UTC) of calculation request</p>\n</li>\n<li><p>where <code>previous_epoch</code> is the data object containing information about last completed epoch:</p>\n<ul>\n<li><p>where <code>id</code> is the number for the previous epoch</p>\n</li>\n<li><p>where <code>start_time</code> is the datetime (in UTC) when the last completed epoch started</p>\n</li>\n<li><p>where <code>end_time</code> is the datetime (in UTC) when the last completed epoch ended</p>\n</li>\n<li><p>where <code>slot_time</code> is the average time (in milliseconds) of slot for the last completed epoch</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>current_epoch</code> is the data object containing information about current epoch:</p>\n<ul>\n<li><p>where <code>id</code> is the number of the current epoch</p>\n</li>\n<li><p>where <code>start_time</code> is the datetime (in UTC) when the current epoch started</p>\n</li>\n<li><p>where <code>end_time</code> is the estimated datetime (in UTC) of when the current epoch will end</p>\n</li>\n<li><p>where <code>transaction_earliest_time</code> is the suggested earliest time (in UTC) to broadcast a delegation for activation in the next epoch. This field is relevant where next_epochs=0</p>\n</li>\n<li><p>where <code>transaction_latest_time</code>is the suggested latest time (in UTC) to broadcast a delegation for activation in the next epoch. This field is relevant where next_epochs=0</p>\n</li>\n</ul>\n</li>\n<li><p>where next_epochs is the data object containing information about the next unstarted epoch:</p>\n<ul>\n<li><p>where <code>id</code> is the number of the next epoch</p>\n</li>\n<li><p>where <code>start_time</code> is the estimated datetime (in UTC) for when the next epoch will start.</p>\n</li>\n<li><p>where <code>end_time</code> is the estimated datetime (in UTC) for when the next epoch will end.</p>\n</li>\n<li><p>where <code>transaction_earliest_time</code> is the suggested earliest time (in UTC) to broadcast a delegation in the next epoch for activation in the epoch after that. This field is relevant where next_epochs=1.</p>\n</li>\n<li><p>where <code>transaction_latest_time</code> is the suggested latest time (in UTC) to broadcast a delegation in the next epoch for activation in the epoch after that. This field is relevant where next_epochs=1.</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","insights","solana","calculator","exit"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"aa45cb3b-fbb1-4757-afe7-b450f1d5e56d","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"/v2/insights/solana/calculator/exit"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"datetime\": \"2025-10-06 11:51:01\",\n  \"previous_epoch\": {\n    \"id\": 100,\n    \"start_time\": \"2025-10-03 09:59:55\",\n    \"end_time\": \"2025-10-05 09:59:55\",\n    \"slot_time\": 410,\n  },\n  \"current_epoch\": {\n    \"id\": 101,\n    \"start_time\": \"2025-10-05 09:59:55\",\n    \"end_time\": \"2025-10-07 09:59:55\",\n    \"transaction_earliest_time\": \"2025-10-06 11:51:01\",\n    \"transaction_latest_time\": \"2025-10-07 08:59:55\"\n  },\n  \"next_epochs\": [\n\t  {\n\t    \"id\": 102,\n\t    \"start_time\": \"2025-10-07 09:59:55\",\n\t    \"end_time\": \"2025-10-09 09:59:55\",\n\t    \"transaction_earliest_time\": \"2025-10-07 10:59:55\",\n\t    \"transaction_latest_time\": \"2025-10-09 08:59:55\"\n\t  }\n  ]\n}"}],"_postman_id":"064838c2-f891-4342-a855-1d11d77d032a"}],"id":"c17e41ba-19eb-4dd6-874a-f272858c93d8","_postman_id":"c17e41ba-19eb-4dd6-874a-f272858c93d8","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Broadcast transaction","id":"65397a77-50e9-42d0-af8c-569c8bfe7a16","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/broadcast","description":"<p>This endpoint is to broadcast a transaction to the Solana blockchain. Please note that to be valid, it must be signed by your chosen wallet provider/custodian.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li>signed_transaction: The signed version of the transaction, [string], (mandatory)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>transaction_hash</code> is the uniquely identifiable hash for the transaction. This can be used with any block explorer to see the transaction.</p>\n</li>\n<li><p>where <code>message</code> is further information about the broadcast success or failure.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","solana","broadcast"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"ebd93651-99eb-4de0-bba6-ad376b45b12e","name":"Successful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/broadcast"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"transaction_hash\": \"<string>\",\n  \"message\": \"<string>\"\n}"},{"id":"ac2f27d6-d000-4b2d-87ca-3f1d67f6d21d","name":"Unsuccessful response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"signed_transaction\": \"string\"\n}","options":{"raw":{"language":"json"}}},"url":"/v2/staking/solana/broadcast"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"errors\": []\n}"}],"_postman_id":"65397a77-50e9-42d0-af8c-569c8bfe7a16"},{"name":"Transaction status","id":"fdabcec1-7912-49ca-ba02-84d7210d60f9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/SOL/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation.</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","SOL","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"5b9a1570-acd9-492d-84f2-e67e2dd8fa60","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/SOL/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","SOL","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"fdabcec1-7912-49ca-ba02-84d7210d60f9"}],"id":"98d60601-fd7f-4c64-ac99-bfa8058a78ac","description":"<p>Staking and Reporting endpoints for SOL on the Solana blockchain</p>\n","_postman_id":"98d60601-fd7f-4c64-ac99-bfa8058a78ac","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Radix","item":[{"name":"Validator address","id":"0ee6ebdf-48a8-48b4-b0cb-c19215b4d1de","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/XRD/validators","description":"<p>This endpoint provides the mainnet Twinstake Radix validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","XRD","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"373eacd0-b15d-4d6f-b93c-55da36f10956","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/XRD/validators","host":[""],"path":["v2","staking","XRD","validators"],"query":[{"key":"asset","value":"XRD","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"address\": \"validator_rdx1...ry94yva\"\n    },\n    {\n        \"address\": \"validator_rdx1s...6csua\"\n    }\n]"}],"_postman_id":"0ee6ebdf-48a8-48b4-b0cb-c19215b4d1de"}],"id":"13828d1a-3cb1-4947-975b-adc668616119","_postman_id":"13828d1a-3cb1-4947-975b-adc668616119","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"Starknet","item":[{"name":"Validator address","id":"a912763b-907c-4d8a-a091-3160621ca7c4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/STRK/validators","description":"<p>This endpoint provides the mainnet Twinstake Radix validator address that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","STRK","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"6dbfa5c6-2282-48c2-af40-fa73458855fb","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/STRK/validators","host":[""],"path":["v2","staking","STRK","validators"],"query":[{"key":"asset","value":"STRK","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"address\": \"0x07787...181dc\"\n    }\n]"}],"_postman_id":"a912763b-907c-4d8a-a091-3160621ca7c4"}],"id":"7d44f09a-af14-4488-a70d-59e74fc3a1b9","_postman_id":"7d44f09a-af14-4488-a70d-59e74fc3a1b9","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}},{"name":"The Open Network","item":[{"name":"Validator address","id":"5e592428-080b-4c0b-83f2-48bfa24dd882","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/TON/validators","description":"<p>This endpoint provides the mainnet Twinstake Open Network validator address/es that funds can be delegated to.</p>\n<p>For testnet activity, if Twinstake has an active testnet validator, then its address will be provided, otherwise a high performance validator run by the foundation/chain or non-competitor will be provided.</p>\n<p><strong>Query Params</strong></p>\n<ul>\n<li>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li>where <code>address</code> is the Twinstake validator address to delegate funds to.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","TON","validators"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g CustodianA.ClientB or CustodianX.ClientY.HierarchyZ, [string], (optional)</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"}],"variable":[]}},"response":[{"id":"631a5709-7623-4000-98ee-0a6bce540bc8","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/TON/validators","host":[""],"path":["v2","staking","TON","validators"],"query":[{"key":"asset","value":"TON","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"address\": \"EQBnDF...6JjRPm\"\n    },\n    {\n        \"address\": \"EQC1X...g5kR6d6\"\n    }\n]"}],"_postman_id":"5e592428-080b-4c0b-83f2-48bfa24dd882"},{"name":"Rewards","id":"368d0676-4da7-4bb5-b381-ec922b232c11","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/ton/rewards","description":"<p>This endpoint provides information about the rewards related information per asset for a given date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the TON address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake TON validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>apr</code> is the annualised percentage rate associated with the validator for the given delegators and entity_filter</p>\n</li>\n<li><p>where <code>apy</code> is the annualised percentage yield associated with the validator for the given delegators and entity_filter, taking into account any auto-compounding of rewards for the validator</p>\n</li>\n<li><p>where <code>rewards</code> is the inflation generated by the protocol</p>\n</li>\n<li><p>where <code>pending_rewards</code> is a list of rewards not distributed to the delegators. This may be not applicable for some chains.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","ton","rewards"],"query":[],"variable":[]}},"response":[{"id":"b509c1d7-e2f1-4a41-b044-31aaa4d7a6b1","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/ton/rewards?date_from=2025-06-19&date_to=2025-06-20&delegators=UQL...03jd&validators=EQBnDF...6JjRPm","path":["v2","reporting","ton","rewards"],"query":[{"key":"date_from","value":"2025-06-19"},{"key":"date_to","value":"2025-06-20"},{"key":"delegators","value":"UQL...03jd"},{"key":"validators","value":"EQBnDF...6JjRPm"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10,\n        \"page_count\": 1\n\t},\n  \"data\": [\n\t  {\n\t    \"date\": \"2025-06-20\",\n\t    \"delegator\": \"UQL...03jd\",\n\t    \"validator\": \"EQBnDF...6JjRPm\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"apr\": 4.49,\n\t    \"apy\": 4.62,\n\t    \"rewards\": {\n\t\t       \"INFLATION\": 173.331796\n\t    }\n\t    \"pending_rewards\": []\n    },\n    ...\n  ]\n}"}],"_postman_id":"368d0676-4da7-4bb5-b381-ec922b232c11"},{"name":"Stakes","id":"2c8c16d2-bdf9-4aa1-870f-5048544f2a43","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/ton/stakes","description":"<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific date range.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>delegator</code> is the TON address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the TON validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>ACTIVE</code> is the amount in TON that is being staked to the Twinstake validator and actively earning rewards</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","ton","stakes"],"query":[],"variable":[]}},"response":[{"id":"4b103a5c-1055-4330-bee2-fbe20a7d442e","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/ton/stakes?date_from=2025-07-01&date_to=2025-07-01&delegators=UQL...03jd","path":["v2","reporting","ton","stakes"],"query":[{"key":"date_from","value":"2025-07-01"},{"key":"date_to","value":"2025-07-01"},{"key":"delegators","value":"UQL...03jd"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t\t  \"date\": \"2025-07-01\",\n\t    \"delegator\": \"UQL...03jd\",\n\t    \"validator\": \"EQBnDF...6JjRPm\",\n\t    \"entity\": \"CustodianA.ClientB\",\n      \"stakes\": {\n        \"ACTIVE\": 7392811,\n      }\n    },\n    ...\n  ]\n}"}],"_postman_id":"2c8c16d2-bdf9-4aa1-870f-5048544f2a43"},{"name":"Transactions","id":"5f4a0da3-6d7b-4c9d-afdf-d427c29239ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/reporting/ton/transactions","description":"<p>This endpoint provides transaction information about all depositing or withdrawing activity on TON for Twinstake validator/s.</p>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>date_from: The date that rewards information should be shown from in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n<li><p>date_to: The date that rewards information should be shown until in the format of <strong>YYYY-MM-DD</strong> e.g <code>2025-11-06</code>, [string], (optional)</p>\n</li>\n</ul>\n<p>If date_to and date_from are not provided the previous month of data is defaulted to.</p>\n<ul>\n<li><p>delegators: A single or array of identifiers which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, list[string], (optional)</p>\n</li>\n<li><p>validators: The Twinstake validator to see staking information about e.g <code>[\"0x123XYZ\"]</code>, list[string], [optional]</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n<li><p>page: The number of pages in the response e.g <code>2</code>, [integer], (optional)</p>\n</li>\n<li><p>page_size: The number of delegator/validator pairs in the response e.g <code>500</code>, [integer], (optional)</p>\n</li>\n</ul>\n<p>These parameters are to ensure the response is performant in the case that a delegator_addresses or entity_filter has a high number of validators associated. If these parameters are not specified then page=1 and page_size=10 will be used.</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>id</code> is the transaction identifier</p>\n</li>\n<li><p>where <code>delegator</code> is the TON address that funds were delegated from</p>\n</li>\n<li><p>where <code>validator</code> is the Twinstake TON validator address</p>\n</li>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping</p>\n</li>\n<li><p>where <code>type</code> is whether the transaction is STAKING, UNSTAKING, WITHDRAW or RESTAKE activity</p>\n</li>\n<li><p>where <code>amount</code> is the transaction amount in the chain’s base unit</p>\n</li>\n<li><p>where <code>timestamp</code> is the date and time that the transaction was processed onchain (UTC)</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","ton","transactions"],"query":[],"variable":[]}},"response":[{"id":"2d470dd9-b449-4168-86eb-3125f4593198","name":"Successful response","originalRequest":{"method":"GET","header":[],"url":{"raw":"/v2/reporting/ton/transactions?entity_filter=CustodianA.ClientB","path":["v2","reporting","ton","transactions"],"query":[{"key":"entity_filter","value":"CustodianA.ClientB"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n\t\"metadata\": {\n\t\t\"page\": 1,\n\t\t\"page_size\": 10,\n\t\t\"total_count\": 10\n\t},\n  \"data\": [\n\t  {\n\t    \"id\": \"0x123123123...\"\n\t    \"delegator\": \"UQL...03jd\",\n\t    \"validator\": \"EQBnDF...6JjRPm\",\n\t    \"entity\": \"CustodianA.ClientB\",\n\t    \"type\": \"STAKING\",\n\t    \"amount\": 6501.44,\n\t    \"timestamp\": \"2025-01-01T10:30:00.00000Z\"\n    },\n    ...\n  ]\n}"}],"_postman_id":"5f4a0da3-6d7b-4c9d-afdf-d427c29239ec"},{"name":"Rewards (old)","id":"11d5d7d9-c40f-44ed-a8c4-2038bb522119","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"TON\",\n    \"date\": \"2024-11-06\",\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/rewards","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/ton/rewards</code> <strong>]</strong></p>\n<p>This endpoint provides information about the rewards related information per asset for a given day.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code> , [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or an array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code> , [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>address</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> is the total amount being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>rewards_amount</code> is the total amount, nanoton, of rewards generated for the given day.</p>\n</li>\n<li><p>where <code>apr</code> is the APR for that given day.</p>\n</li>\n<li><p>where <code>apy</code> is the APY for the given day.</p>\n</li>\n<li><p>where <code>epoch_ended_on_day</code> is the last epoch to have ended in the given day, this will be blank if no epoch ended that day.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_length</code> is the number of days in the epoch/checkpoint/period N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_start</code> is the date and time that the epoch began. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>epoch/checkpoint_end</code> is the date and time that the epoch ended. N.B this will be an empty field for any days where the epoch continues across multiple days.</p>\n</li>\n<li><p>where <code>annual_epochs/checkpoints</code> is the number of epochs in a 365 day period based on the length of the current epoch.</p>\n</li>\n<li><p>where <code>return_over_epoch/day</code> is the ROI as calculated by daily return over staked amount.</p>\n</li>\n</ul>\n","urlObject":{"path":["v2","reporting","rewards"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"79f38c65-f698-45be-b9cc-531e991e8d5c","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"TON\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\",\n  \"validator_indexes\": null\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/rewards"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"\n\t\t\"TON\": [\n\t\t\t{\n                    \"address\": \"GoeW4...DK9\",\n                    \"date\": \"2023-11-06\",\n                    \"entity\": \"CustodianA.ClientB\",\n                    \"active_delegation_amount\": 61.7650965,\n                    \"rewards_amount\": 59.748411049,\n                    \"APR\": 183.79222135360868,\n                    \"APY\": 4.436138825382508e+64,\n                    \"epoch_ended_on_day\": 1,\n                    \"epoch/checkpoint_length\": 1.0,\n                    \"epoch/checkpoint_start\": \"2023-11-05 04:32:15\",\n                    \"epoch/checkpoint_end\": \"2023-11-06 09:18:01\",\n                    \"annual_epochs/checkpoints\": 365.0,\n                    \"return_over_epoch/day\": 0.5035403324756402\n        }\n]}"}],"_postman_id":"11d5d7d9-c40f-44ed-a8c4-2038bb522119"},{"name":"Staked position (old)","id":"0b23f9d9-f179-464b-8be0-f888a98b51b1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"TON\",\n  \"date\": \"2023-11-06\",\n  \"delegator_addresses\": [\n    \"0x123...XYZ\",\n    \"0x789...ABC\"\n  ],\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/staked","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/ton/stakes</code> <strong>]</strong></p>\n<p>This endpoint provides information about the latest staked position or a snapshot of the staked position for a specific day. It can show information at an asset level or for specific delegator addresses or entity filter.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>delegator_addresses: A single or array of crypto addresses which have staked or delegated funds to a Twinstake validator e.g <code>[0x123....xyz]</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of Custodian.Client.Hierarchy e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code>, [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> , <code>delegator_addresses</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>active_delegation_amount</code> / <code>active_stake_amount</code> is the total amount in nanoton being actively staked or delegated for the given day.</p>\n</li>\n<li><p>where <code>active_validator_count</code> is the number of Ethereum validators that are active for the given day.</p>\n</li>\n<li><p>where <code>new_delegations</code> / <code>new_deposits</code> are any new delegations or staking deposits, in nanoton, on the given day.</p>\n</li>\n<li><p>where <code>pending_delegation</code> / <code>pending_activation</code> is any amount, in nanoton, which is currently warming up/in the activation queue and not yet actively earning rewards by the given day.</p>\n</li>\n<li><p>where <code>next_delegation_eta</code> / <code>next_activation_eta</code> is the timestamp for when the next staking deposit or delegation warm up will occur. Where there are multiple, this is the earliest.</p>\n</li>\n<li><p>where <code>exited_delegation</code> / <code>exited_stake</code> is the amount, in nanoton, of assets withdrawn during the given day.</p>\n</li>\n<li><p>where <code>pending_exit</code> is the amount, in nanoton, which is within the withdrawal or cool down period but which is not yet accessible or fully exited.</p>\n</li>\n<li><p>where <code>next_exit_eta</code> is the timestamp for when the next staking withdrawal or delegation cool down will occur. Where there are multiple, this is the earliest.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","staked"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"ea57b367-bcee-4b7a-bd19-bcfed7b1f2c9","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"TON\",\n  \"date\": \"2023-01-30\",\n  \"delegator_addresses\": null,\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"https://api.twinstake.io/v2/reporting/staked"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"TON\": [\n\t{\n\t    \"address\": \"HN7cA...YWrH\",\n\t\t\t\"date\": \"2023-01-03\",\n\t\t\t\"entity\": \"CustodianA.ClientB\",\n\t\t\t\"active_delegation_amount\": 2000,\n\t\t\t\"new_delegations\": 0,\n\t\t\t\"pending_delegation\": 0,\n\t\t\t\"next_activation_eta\": null,\n\t\t\t\"exited_delegation\": 200,\n\t\t\t\"pending_exit\": 0,\n\t\t\t\"next_exit_eta\": null\t\t\t\n}]"}],"_postman_id":"0b23f9d9-f179-464b-8be0-f888a98b51b1"},{"name":"Transactions (old)","id":"d7ed6758-3778-4633-8835-90b2e151ad41","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"asset\": \"TON\"\n    \"from_date\": \"2023-11-06\"\n    \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026. PLEASE MIGRATE TO</strong> <code>/v2/reporting/ton/transactions</code> <strong>]</strong></p>\n<p>This endpoint provides transaction information about all depositing or withdrawing activity on Ethereum and all delegating and undelegating activity on the blockchains which Twinstake supports.</p>\n<p><strong>Request Body</strong></p>\n<ul>\n<li><p>asset: The ticker of a crypto asset e.g <code>SOL</code> , [string], (optional)</p>\n</li>\n<li><p>from_date: In the format of <strong>YYYY-MM-DD</strong> e.g <code>2023-10-01</code>, [string], (optional)</p>\n</li>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n</ul>\n<p><strong>To Note</strong></p>\n<ul>\n<li><p>If <code>date</code> is not provided then the response will be for the last completed 24h period</p>\n</li>\n<li><p><code>asset</code> and <code>entity_filter</code> are optional parameters</p>\n</li>\n</ul>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash for the delegation/staking/undelegation/unstaking activity.</p>\n</li>\n<li><p>where <code>amount</code> is the amount staked/delegated (or unstaked/undelegated) in the native asset.</p>\n</li>\n<li><p>where <code>type</code> is the transaction type e.g STAKE, REWARD, UNSTAKE, WITHDRAW REWARDS etc.</p>\n</li>\n<li><p>where <code>datetime</code> is the time of the transaction (or first in a batch of transactions) in the format of <strong>YYYY-MM-DD HH:MM:SS.</strong></p>\n</li>\n<li><p>where <code>stake_account</code> is the delegator address where funds were sent to Twinstake from.</p>\n</li>\n<li><p>where <code>explorer_url</code> is a link to the transaction information with a relevant block explorer.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","reporting","transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"debe7b1e-d791-4576-9375-14f2202fd91d","name":"Successful response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"asset\": \"TON\",\n  \"from_date\": \"2023-11-06\",\n  \"entity_filter\": \"CustodianA.ClientB\"\n}","options":{"raw":{"headerFamily":"json","language":"json"}}},"url":"/v2/reporting/transactions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n\"TON\": {\n\t\t\t\t\"entity\": \"CustodianA.ClientB\",\n                \"transaction_hash\": \"688a80...9ebd08f\",\n                \"amount\": 117310.0,\n                \"type\": \"STAKING\",\n                \"datetime\": \"2023-11-24 07:59:55\",\n                \"stake_account\": \"GxYrCF7oBiwAjHCowTfQZ5tu5W5w9kS6uEuwZF2g38bJ\",\n                \"explorer_url\": \"https://tonscan.org/tx/688a80...9ebd08f\"\n            },"}],"_postman_id":"d7ed6758-3778-4633-8835-90b2e151ad41"},{"name":"Transaction status","id":"77a85fa6-3add-4a22-b26a-a28cdabdd563","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/v2/staking/TON/status","description":"<p><strong>[THIS ENDPOINT WILL BE DEPRECATED ON 29th JANUARY 2026]</strong></p>\n<p>This endpoint is to provide users with information about the status of an asset delegation or undelegation</p>\n<p><strong>Path Parameter</strong></p>\n<ul>\n<li>asset : The ticker of a crypto asset e.g <code>ATOM</code> , [string], (mandatory)</li>\n</ul>\n<p><strong>Query Parameters</strong></p>\n<ul>\n<li><p>entity_filter: The identifier of the custodian or client in the format of <strong>Custodian.Client.Hierarchy</strong> e.g <code>CustodianA.ClientB</code> or <code>CustodianX.ClientY.HierarchyZ</code> , [string], (optional)</p>\n</li>\n<li><p>transaction_hash: The transaction of the delegation or undelegation activity e.g <code>CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR</code> , [strong], (optional)</p>\n</li>\n</ul>\n<p>Where either of transaction_hash or entity_filter must be provided</p>\n<p><strong>Response Body</strong></p>\n<ul>\n<li><p>where <code>entity</code> is the identifier for the <strong>custodian.client.hierarchy</strong> mapping.</p>\n</li>\n<li><p>where <code>transaction_hash</code> is the transaction hash where the user has delegated or undelegated the asset.</p>\n</li>\n<li><p>where <code>amount</code> is the amount delegated (or undelegated) in the native asset amount.</p>\n</li>\n<li><p>where <code>delegator_address</code> is the address that has delegated funds to Twinstake.</p>\n</li>\n<li><p>where <code>status</code> is any of:</p>\n<ul>\n<li><p><strong>delegation_pending</strong>: where the delegation transaction has been broadcast, processed but not yet through the required bonding/warm up period</p>\n</li>\n<li><p><strong>delegated:</strong> the delegated transaction is through the necessary warm up period and the funds are actively delegated to the validator and earning rewards</p>\n</li>\n<li><p><strong>undelegation_pending</strong>: where the undelegation transaction has been broadcast, processed but not yet through the required unbonding/cool down period</p>\n</li>\n<li><p><strong>undelegated:</strong> the undelegated transaction is through the necessary cool down period and the funds are actively undelegated from the validator and no longer earning rewards but where they have not yet been received back to the user's account</p>\n</li>\n<li><p><strong>withdrawn</strong>: the funds are undelegated and have now been withdrawn back to the user's account</p>\n</li>\n</ul>\n</li>\n<li><p>where <code>eta_until</code> is the time (format HH:MM:SS) until:</p>\n<ul>\n<li><p>the delegation is actively earning rewards (where the status is related to a delegation being made to us but still within the bonding period)</p>\n</li>\n<li><p>the delegation is completely withdrawn from our validator (where the status is related to an undelegation but still within the unbonding period)</p>\n</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}},"urlObject":{"path":["v2","staking","TON","status"],"host":[""],"query":[{"disabled":true,"description":{"content":"<p>The identifier of the custodian or client in the format of Custodian.Client.Hierarchy</p>\n","type":"text/plain"},"key":"entity_filter","value":"CustodianA.ClientB"},{"disabled":true,"description":{"content":"<p>The transaction of the delegation or undelegation activity</p>\n","type":"text/plain"},"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"}],"variable":[]}},"response":[{"id":"425cc3ef-3566-4f61-a662-a6facdb28273","name":"Successful response","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"/v2/staking/TON/status?transaction_hash=CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR&entity_filter=Custodian.Client.Hierarchy","host":[""],"path":["v2","staking","TON","status"],"query":[{"key":"transaction_hash","value":"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR"},{"key":"entity_filter","value":"Custodian.Client.Hierarchy","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n\t{\n\t\t\"entity\": \"Custodian.Client.Hierarchy\",\n\t\t\"delegator_address\": \"32fdh7fnsus89ydfnu92z8y4h47x\",\n\t\t\"date\": \"2023-01-30\",\n\t\t\"amount\": \"1500345\"\n\t\t\"transaction_hash\": \"CRLBe5sMbDn5nEnmW46PxvymbbLtsFrNeUuZCEtKaYfR\"\n\t\t\"status\": \"undelegation_pending\"\n\t\t\"eta_until\": \"00:24:13\"\n\t},\n]"}],"_postman_id":"77a85fa6-3add-4a22-b26a-a28cdabdd563"}],"id":"a075b828-89cf-46d4-9981-a28c3652ca91","description":"<p>Staking and Reporting endpoints for TON on the Open Network blockchain</p>\n","_postman_id":"a075b828-89cf-46d4-9981-a28c3652ca91","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"f832e69c-1967-4832-a03d-d2d7293550fc","id":"f832e69c-1967-4832-a03d-d2d7293550fc","name":"Twinstake API V2 Documentation","type":"collection"}}}],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]}},"event":[{"listen":"prerequest","script":{"id":"17b61667-8b67-4987-9696-772aaac57171","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"435c0fef-46e3-4681-a1c8-e0a4698cbb12","type":"text/javascript","exec":[""]}}],"variable":[{"key":"baseUrl","value":"","type":"default"},{"key":"token","value":"","type":"string"}]}