Sandbox mode
Testing your integration without real funds.
Every merchant has two API keys: a live key (tp_live_...) and a test key (tp_test_...). Both are shown once, in the dashboard (Settings → API keys), at creation or regeneration.
Requests authenticated with a tp_test_... key run entirely in sandbox mode: no real blockchain transaction is ever submitted, no real gas is spent, and no real funds move.
What's different in sandbox
POST /subscriptionsreturns a fixed placeholderoperatorWallet(0x000000000000000000000000000000005a4d42for EVM plans, a fixed placeholder base58 address for Solana plans) instead of the real operator address. Do not send real token approvals to this address — it holds no authority and is not monitored.- Charge cycles skip on-chain reads/writes and record synthetic
pullTxHash/merchantTransferTxHash/platformTransferTxHashvalues — prefixed0xdead...for EVM plans, or a recognizable fake-signature-shaped string for Solana plans — recognizable sentinels, never real transaction hashes/signatures, and they will never resolve on any block explorer. - Sandbox subscriptions and charges are fully isolated from live ones — a request made with your live key never sees or modifies sandbox data, and vice versa.
- Plans are shared between live and test — create a plan once, subscribe to it with either key.
- Sandbox subscriptions and their charges are automatically deleted after 30 days.
Triggering a sandbox charge
Sandbox subscriptions age normally and are picked up by the same billing cron as live ones, so you can test long-running behavior by waiting. For immediate feedback while developing, call POST /sandbox/charge with { "subscriptionId": "..." } using your test API key — this force-runs one charge cycle synchronously and returns the outcome right away.
Sandbox webhooks
Sandbox events use the exact same signature scheme (x-tidepay-signature, HMAC-SHA256 over ${timestamp}.${rawBody}) as live events — no special verification logic needed. Every webhook payload includes a top-level isSandbox: boolean field so you can route test events away from production handling if you share one endpoint for both. See Webhooks for the full payload shape, event list, and signature verification example.