{"id":"graybox","name":"GrayBox Agent Checkout","built_on":"g-pay (quarantine vault and one-time stealth addresses)","version":"0.1.0","summary":"Merchants never touch dirty money: every agent payment waits in the gray box until the payer is screened, then it is released or refunded.","description":"Checkout for the agent economy. An agent's payment is held in the operator's quarantine wallet (custodial: the operator holds the funds until settlement). The paying wallet and the wallets that funded it are screened for AML, and only then is the payment released to the merchant, at a one-time address that never reveals the merchant's treasury. Payments that fail screening or are not settled in time go back to the payer.","category":"Merchant tools","network":"solana:mainnet","settlement":"wallet","custody":"The agent's PayBox wallet signs the checkout itself; the plugin never holds its key. While in quarantine the payment is held in the operator's quarantine wallet (custodial: the operator holds the funds until settlement).","quarantine_wallet":"Cg29HFLnsQzHEcrN4ST4aKDwemy3iqBCYgYLioyp8Hbt","signing":{"flow":"checkout returns an unsigned transaction proposal; PayBox has the paying wallet approve, sign and submit it. Then call checkout_status."},"tools":[{"id":"list_merchants","title":"Browse merchants","kind":"read","moves_funds":false,"requires_merchant_key":false,"description":"List the businesses that accept agent payments through GrayBox, what they sell and the token they accept.","endpoint":{"method":"POST","url":"http://gpaybox.vercel.app/tools/list_merchants"},"input_schema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"id":"checkout","title":"Pay a merchant","kind":"pay","moves_funds":true,"requires_merchant_key":false,"description":"Pay a merchant for an item. The payment goes into the operator's quarantine wallet (custodial), the paying wallet is screened for AML, then the payment is released to the merchant at a one-time address (or refunded to you if it fails screening or isn't settled in time). Returns an unsigned transaction for your PayBox wallet to approve; then call checkout_status with the checkout_id.","endpoint":{"method":"POST","url":"http://gpaybox.vercel.app/tools/checkout"},"input_schema":{"type":"object","properties":{"merchant":{"type":"string","description":"Merchant id from list_merchants"},"item":{"type":"string","description":"Item id from list_merchants"},"amount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","description":"Custom amount, when not buying a catalog item"},"payer":{"type":"string","minLength":32,"maxLength":44,"description":"Your PayBox wallet address (pays and receives any refund)"},"memo":{"type":"string","maxLength":140}},"required":["merchant","payer"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"id":"submit","title":"Submit signed payment","kind":"submit","moves_funds":false,"requires_merchant_key":false,"description":"Broadcast the checkout transaction signed by PayBox. Waits for AML screening and returns the outcome: released to the merchant (with the delivered item) or refunded.","endpoint":{"method":"POST","url":"http://gpaybox.vercel.app/tools/submit"},"input_schema":{"type":"object","properties":{"signed_transaction_base64":{"type":"string","minLength":1}},"required":["signed_transaction_base64"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"id":"checkout_status","title":"Check a payment","kind":"read","moves_funds":false,"requires_merchant_key":false,"description":"Show where a checkout stands: in quarantine, AML verdict, released to the merchant or refunded. Also moves it forward if a step is due.","endpoint":{"method":"POST","url":"http://gpaybox.vercel.app/tools/checkout_status"},"input_schema":{"type":"object","properties":{"checkout_id":{"type":"string","minLength":32,"maxLength":44,"description":"checkout_id from checkout"}},"required":["checkout_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"id":"screen_address","title":"Screen a wallet","kind":"read","moves_funds":false,"requires_merchant_key":false,"description":"Run the same AML screen a checkout gets, on any Solana wallet, without paying: OFAC SDN Solana addresses, Circle/Tether freezes on mainnet, and the wallets that funded it. Nothing is written on-chain.","endpoint":{"method":"POST","url":"http://gpaybox.vercel.app/tools/screen_address"},"input_schema":{"type":"object","properties":{"address":{"type":"string","minLength":32,"maxLength":44,"description":"Solana wallet to screen"}},"required":["address"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"id":"merchant_treasury","title":"Merchant treasury (private view)","kind":"merchant","moves_funds":false,"requires_merchant_key":true,"description":"For the merchant: find every payment addressed to you with your view key and total what has cleared. Your funds sit across one-time addresses; no single treasury wallet exists on-chain.","endpoint":{"method":"POST","url":"http://gpaybox.vercel.app/tools/merchant_treasury"},"input_schema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"id":"compliance_log","title":"Compliance log","kind":"merchant","moves_funds":false,"requires_merchant_key":true,"description":"For the merchant's auditor: every payment with its AML verdict, the evidence hash recorded on-chain, and whether it was released or refunded.","endpoint":{"method":"POST","url":"http://gpaybox.vercel.app/tools/compliance_log"},"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"default":25}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}]}