{"data":{"provider":"turnkey","chainId":4663,"wallet":null,"placeholders":{"{{WALLET_ADDRESS}}":"Replace with the agent wallet's own address, or call again with ?wallet=0x…","<TURNKEY_USER_ID>":"The non-root Turnkey user (API key) the agent signs with"},"contracts":{"usdg":"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168","vaults":["0x2bb2f5544767Cd957a39602f6a6eC9c1192BAE7F","0xFb66dFA5A5BdDaf82fafF88f9Fc5A21F13e9E27F","0xCCC7F13C7dE68475B68029626115EfcdA197f06b"],"redeemQueue":null,"upVaults":[{"vault":"0xe661162f01b243a2f5c708b3186c90b983Ec948D","depositQueue":"0x97Bee18bFA733cD64d9B7Eb580372D5dFF917539","withdrawalQueue":"0xf217ff50f330325601a70862359baADAc1Dd851c"},{"vault":"0x7E6f08488cEB8b3B7dEa3342eC9742EE287Eabb8","depositQueue":"0x53770eCFD80fD949C460e35ef1974f3bb4BCaD83","withdrawalQueue":"0xe7CFE3aeafb06d66c071746b4a30cF26f447E04B"}],"stockTokenVaults":[{"vault":"0xF8DE3bC8F4e577Bc59f166b1DAA391c8C69c73D5","router":"0x59EbD9f8d0f9d6Fd1dA6a35E1C73b2A9f9D908c2"},{"vault":"0x5eaD63f22B2cF752d0F4aE4bcA2BD51cf83A641e","router":"0x996e5Fa98c6B897A22aD8ED7A4c4eE60BAA518A3"},{"vault":"0x6bAb969D9927c8B17BC9dd42851c7b96E014532d","router":"0x74Ca2E7964fDa8d02Cc9B49C5D00A57356ECbaf4"},{"vault":"0xB20bb3f29cd2f85cF06C240cE3302698e27f221d","router":"0x2Ac71E82FD7A8658f226281e21172026eb04d364"},{"vault":"0x9A8D2bB5684D03aa661B86859b960eF9BBe5087b","router":"0x1529616710C60f1dDd58a362f6d30a2B5851D6DD"},{"vault":"0x605829eEb18BDdA45FC165A9d0cc19bFDEbF3A02","router":"0xEda8457Dd925262b9021189BD8Ddbaaa92d9d727"},{"vault":"0x70752181e01197bD2e52575d03b9c323ea8f26Bd","router":"0x3461322bAf5a767FE9b4fE7a93FcD89627124D54"},{"vault":"0xE0d7196D0e7Bdd3b53a11970a4edfa327DB76456","router":"0x7f221556523582198b1b89A6226151c4A0bFd3F7"},{"vault":"0x387f9820DB494eC1fAeb9105a3c9E6226caCb057","router":"0x7906781F8D038f54eCAEEa5c7eFCB41B94445722"},{"vault":"0x2f936437A681b89cccd98a74f02Ee5779F6B559D","router":"0x9fc4Ce2677b2775cE3d99d2F8eE48A90175E69a7"},{"vault":"0x3BB0a114C2e491520806d9a546e1D7f354241026","router":"0x0b5463bDF101F6a6C1aFeF843Fbcfd6D7129b6fb"},{"vault":"0xc5aF3186b7b207beDd865eCcf344F5f0C69CA876","router":"0x1Fa5A6699F440fbEF56191d36430Bd2c603b0cf1"},{"vault":"0xD72F1596Bf2b787af95cfe2BBF792B75ADE9400c","router":"0x2D2afdDd14d784735DC1348E046410413531e3Aa"},{"vault":"0x3f70f06D6fB574731e789Ee03DFa4E8f60783dDf","router":"0x5b191a57327EaeDc7fc2815005320606b1B587d3"},{"vault":"0x8197D34E8ed1d261aC462d898083eCBf8d5254b9","router":"0xd8A0d74b092Eb51bc55120E48087eBf3a00F286F"},{"vault":"0x03504EcAEB6302db390Aa676A2636cf764f279a2","router":"0xAc7D778382C3834Ae522de0f2480Dd88a2b3f403"},{"vault":"0x21ff4df049143dC698761a07949bd3e769aA3787","router":"0x9fc0625DB7c04b2BaB1aD8Cfd2c8AaFA59336e53"},{"vault":"0x78814fdC1AfD07ae859409F44B5D57DeA6798eF6","router":"0x4203a0828178f51107589bcECA03e8001d8fb40E"}],"limitOrderHook":"0xa31729621a2280C0Ff9Aaff5B3F357cFF1bEC040","gridStrategy":"0xd597785134307B5324f469A9506066fAd4827730","basketZap":"0xFca65c50325b83F8f1E07cD103c00De0cEa4Fb39"},"policies":[{"policyName":"TickerSpring agent: USDG approve to the agent vaults and the grid strategy","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to == '0x5fc5360d0400a0fd4f2af552add042d716f1d168' && eth.tx.data[0..10] == '0x095ea7b3' && eth.tx.data[34..74] in ['2bb2f5544767cd957a39602f6a6ec9c1192bae7f', 'fb66dfa5a5bddaf82faff88f9fc5a21f13e9e27f', 'ccc7f13c7de68475b68029626115efcda197f06b', '97bee18bfa733cd64d9b7eb580372d5dff917539', '53770ecfd80fd949c460e35ef1974f3bb4bcad83', '59ebd9f8d0f9d6fd1da6a35e1c73b2a9f9d908c2', '996e5fa98c6b897a22ad8ed7a4c4ee60baa518a3', '74ca2e7964fda8d02cc9b49c5d00a57356ecbaf4', '2ac71e82fd7a8658f226281e21172026eb04d364', '1529616710c60f1ddd58a362f6d30a2b5851d6dd', 'eda8457dd925262b9021189bd8ddbaaa92d9d727', '3461322baf5a767fe9b4fe7a93fcd89627124d54', '7f221556523582198b1b89a6226151c4a0bfd3f7', '7906781f8d038f54ecaeea5c7efcb41b94445722', '9fc4ce2677b2775ce3d99d2f8ee48a90175e69a7', '0b5463bdf101f6a6c1afef843fbcfd6d7129b6fb', '1fa5a6699f440fbef56191d36430bd2c603b0cf1', '2d2afddd14d784735dc1348e046410413531e3aa', '5b191a57327eaedc7fc2815005320606b1b587d3', 'd8a0d74b092eb51bc55120e48087ebf3a00f286f', 'ac7d778382c3834ae522de0f2480dd88a2b3f403', '9fc0625db7c04b2bab1ad8cfd2c8aafa59336e53', '4203a0828178f51107589bceca03e8001d8fb40e', 'd597785134307b5324f469a9506066fad4827730']","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Token approve to the Limit Orders hook","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.data[0..10] == '0x095ea7b3' && eth.tx.data[34..74] == 'a31729621a2280c0ff9aaff5b3f357cff1bec040'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Vault deposit request for the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0x2bb2f5544767cd957a39602f6a6ec9c1192bae7f', '0xfb66dfa5a5bddaf82faff88f9fc5a21f13e9e27f', '0xccc7f13c7de68475b68029626115efcda197f06b'] && eth.tx.data[0..10] == '0xd8d933b7' && eth.tx.data[98..138] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Cancel the wallet's own deposit request","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0x2bb2f5544767cd957a39602f6a6ec9c1192bae7f', '0xfb66dfa5a5bddaf82faff88f9fc5a21f13e9e27f', '0xccc7f13c7de68475b68029626115efcda197f06b'] && eth.tx.data[0..10] == '0x72fada5c'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Vault withdrawal in USDG to the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0x2bb2f5544767cd957a39602f6a6ec9c1192bae7f', '0xfb66dfa5a5bddaf82faff88f9fc5a21f13e9e27f', '0xccc7f13c7de68475b68029626115efcda197f06b'] && eth.tx.data[0..10] == '0xc76ba49f' && eth.tx.data[98..138] == '{{WALLET_ADDRESS}}' && eth.tx.data[162..202] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Vault withdrawal in kind to the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0x2bb2f5544767cd957a39602f6a6ec9c1192bae7f', '0xfb66dfa5a5bddaf82faff88f9fc5a21f13e9e27f', '0xccc7f13c7de68475b68029626115efcda197f06b'] && eth.tx.data[0..10] == '0xab012451' && eth.tx.data[98..138] == '{{WALLET_ADDRESS}}' && eth.tx.data[162..202] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Up vault share approve to its withdrawal queue","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0xe661162f01b243a2f5c708b3186c90b983ec948d', '0x7e6f08488ceb8b3b7dea3342ec9742ee287eabb8'] && eth.tx.data[0..10] == '0x095ea7b3' && eth.tx.data[34..74] in ['f217ff50f330325601a70862359baadac1dd851c', 'e7cfe3aeafb06d66c071746b4a30cf26f447e04b']","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Up deposit request for the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0x97bee18bfa733cd64d9b7eb580372d5dff917539', '0x53770ecfd80fd949c460e35ef1974f3bb4bcad83'] && eth.tx.data[0..10] == '0xd8d933b7' && eth.tx.data[98..138] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Up withdrawal request to the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0xf217ff50f330325601a70862359baadac1dd851c', '0xe7cfe3aeafb06d66c071746b4a30cf26f447e04b'] && eth.tx.data[0..10] == '0x24c7e13f' && eth.tx.data[98..138] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Cancel the wallet's own Up request","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0x97bee18bfa733cd64d9b7eb580372d5dff917539', '0x53770ecfd80fd949c460e35ef1974f3bb4bcad83', '0xf217ff50f330325601a70862359baadac1dd851c', '0xe7cfe3aeafb06d66c071746b4a30cf26f447e04b'] && eth.tx.data[0..10] == '0x40e58ee5'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Stock Token vault share approve to its router","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0xf8de3bc8f4e577bc59f166b1daa391c8c69c73d5', '0x5ead63f22b2cf752d0f4ae4bca2bd51cf83a641e', '0x6bab969d9927c8b17bc9dd42851c7b96e014532d', '0xb20bb3f29cd2f85cf06c240ce3302698e27f221d', '0x9a8d2bb5684d03aa661b86859b960ef9bbe5087b', '0x605829eeb18bdda45fc165a9d0cc19bfdebf3a02', '0x70752181e01197bd2e52575d03b9c323ea8f26bd', '0xe0d7196d0e7bdd3b53a11970a4edfa327db76456', '0x387f9820db494ec1faeb9105a3c9e6226cacb057', '0x2f936437a681b89cccd98a74f02ee5779f6b559d', '0x3bb0a114c2e491520806d9a546e1d7f354241026', '0xc5af3186b7b207bedd865eccf344f5f0c69ca876', '0xd72f1596bf2b787af95cfe2bbf792b75ade9400c', '0x3f70f06d6fb574731e789ee03dfa4e8f60783ddf', '0x8197d34e8ed1d261ac462d898083ecbf8d5254b9', '0x03504ecaeb6302db390aa676a2636cf764f279a2', '0x21ff4df049143dc698761a07949bd3e769aa3787', '0x78814fdc1afd07ae859409f44b5d57dea6798ef6'] && eth.tx.data[0..10] == '0x095ea7b3' && eth.tx.data[34..74] in ['59ebd9f8d0f9d6fd1da6a35e1c73b2a9f9d908c2', '996e5fa98c6b897a22ad8ed7a4c4ee60baa518a3', '74ca2e7964fda8d02cc9b49c5d00a57356ecbaf4', '2ac71e82fd7a8658f226281e21172026eb04d364', '1529616710c60f1ddd58a362f6d30a2b5851d6dd', 'eda8457dd925262b9021189bd8ddbaaa92d9d727', '3461322baf5a767fe9b4fe7a93fcd89627124d54', '7f221556523582198b1b89a6226151c4a0bfd3f7', '7906781f8d038f54ecaeea5c7efcb41b94445722', '9fc4ce2677b2775ce3d99d2f8ee48a90175e69a7', '0b5463bdf101f6a6c1afef843fbcfd6d7129b6fb', '1fa5a6699f440fbef56191d36430bd2c603b0cf1', '2d2afddd14d784735dc1348e046410413531e3aa', '5b191a57327eaedc7fc2815005320606b1b587d3', 'd8a0d74b092eb51bc55120e48087ebf3a00f286f', 'ac7d778382c3834ae522de0f2480dd88a2b3f403', '9fc0625db7c04b2bab1ad8cfd2c8aafa59336e53', '4203a0828178f51107589bceca03e8001d8fb40e']","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Stock Token withdrawal in USDG to the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0x59ebd9f8d0f9d6fd1da6a35e1c73b2a9f9d908c2', '0x996e5fa98c6b897a22ad8ed7a4c4ee60baa518a3', '0x74ca2e7964fda8d02cc9b49c5d00a57356ecbaf4', '0x2ac71e82fd7a8658f226281e21172026eb04d364', '0x1529616710c60f1ddd58a362f6d30a2b5851d6dd', '0xeda8457dd925262b9021189bd8ddbaaa92d9d727', '0x3461322baf5a767fe9b4fe7a93fcd89627124d54', '0x7f221556523582198b1b89a6226151c4a0bfd3f7', '0x7906781f8d038f54ecaeea5c7efcb41b94445722', '0x9fc4ce2677b2775ce3d99d2f8ee48a90175e69a7', '0x0b5463bdf101f6a6c1afef843fbcfd6d7129b6fb', '0x1fa5a6699f440fbef56191d36430bd2c603b0cf1', '0x2d2afddd14d784735dc1348e046410413531e3aa', '0x5b191a57327eaedc7fc2815005320606b1b587d3', '0xd8a0d74b092eb51bc55120e48087ebf3a00f286f', '0xac7d778382c3834ae522de0f2480dd88a2b3f403', '0x9fc0625db7c04b2bab1ad8cfd2c8aafa59336e53', '0x4203a0828178f51107589bceca03e8001d8fb40e'] && eth.tx.data[0..10] == '0x375980f6' && eth.tx.data[98..138] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Stock Token withdrawal in kind to the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to in ['0xf8de3bc8f4e577bc59f166b1daa391c8c69c73d5', '0x5ead63f22b2cf752d0f4ae4bca2bd51cf83a641e', '0x6bab969d9927c8b17bc9dd42851c7b96e014532d', '0xb20bb3f29cd2f85cf06c240ce3302698e27f221d', '0x9a8d2bb5684d03aa661b86859b960ef9bbe5087b', '0x605829eeb18bdda45fc165a9d0cc19bfdebf3a02', '0x70752181e01197bd2e52575d03b9c323ea8f26bd', '0xe0d7196d0e7bdd3b53a11970a4edfa327db76456', '0x387f9820db494ec1faeb9105a3c9e6226cacb057', '0x2f936437a681b89cccd98a74f02ee5779f6b559d', '0x3bb0a114c2e491520806d9a546e1d7f354241026', '0xc5af3186b7b207bedd865eccf344f5f0c69ca876', '0xd72f1596bf2b787af95cfe2bbf792b75ade9400c', '0x3f70f06d6fb574731e789ee03dfa4e8f60783ddf', '0x8197d34e8ed1d261ac462d898083ecbf8d5254b9', '0x03504ecaeb6302db390aa676a2636cf764f279a2', '0x21ff4df049143dc698761a07949bd3e769aa3787', '0x78814fdc1afd07ae859409f44b5d57dea6798ef6'] && eth.tx.data[0..10] == '0x9b07b27e' && eth.tx.data[98..138] == '{{WALLET_ADDRESS}}' && eth.tx.data[162..202] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Token approve to the BasketZap (basket buys and sells)","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.data[0..10] == '0x095ea7b3' && eth.tx.data[34..74] == 'fca65c50325b83f8f1e07cd103c00de0cea4fb39'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Basket buy through the BasketZap, paid to the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to == '0xfca65c50325b83f8f1e07cd103c00de0cea4fb39' && eth.tx.data[0..10] == '0x8ee4849e' && eth.tx.data[354..394] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Basket sell through the BasketZap, paid to the wallet itself","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to == '0xfca65c50325b83f8f1e07cd103c00de0cea4fb39' && eth.tx.data[0..10] == '0xd300fbcc' && eth.tx.data[354..394] == '{{WALLET_ADDRESS}}'","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Limit orders: create, cancel, claim, realize (always the sender's own)","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to == '0xa31729621a2280c0ff9aaff5b3f357cff1bec040' && eth.tx.data[0..10] in ['0xc25d6637', '0x3e993775', '0xb66f0998', '0x71baa1af', '0x8de9148b', '0x770fc860']","notes":"Generated by GET /v1/agent/policies/turnkey"},{"policyName":"TickerSpring agent: Grids: open, close, set repeat, collect (always the sender's own)","effect":"EFFECT_ALLOW","consensus":"approvers.any(user, user.id == '<TURNKEY_USER_ID>')","condition":"eth.tx.chain_id == 4663 && eth.tx.value == 0 && eth.tx.to == '0xd597785134307b5324f469a9506066fad4827730' && eth.tx.data[0..10] in ['0xa31bba7f', '0x385012a0', '0x1f28b8c5', '0xe1acf590', '0xd51ae60a']","notes":"Generated by GET /v1/agent/policies/turnkey"}],"notes":["Create each entry with Turnkey's createPolicy (policyName, effect, consensus, condition, notes) for the agent's non-root user.","Turnkey denies non-root activity no policy allows; root users bypass policies, so never give the agent a root key.","Conditions slice raw calldata, so no smart contract interface upload is needed; addresses are lowercase.","The policies list today's agent vaults, hook and strategy; fetch them again when /v1/agent/products changes.","Stock Token vault deposits (router.deposit) and the Up in-kind exit (redeemEmergencyInKind) name the receiver inside a struct, so these rules don't allow them: sign those with the sign link, or add your own rule."]}}