A sandbox that behaves like production.
You shouldn't have to point at a different hostname or a throwaway cluster to test. The sandbox is the same API, the same deployment — the difference is your key's mode. A test key routes every rail to a simulator that settles, fails and returns just like the real thing, against test data that never touches your live ledger.
Test keys vs live keys
Test mode
X-API-Key: dt_test_...
Pins every rail to the simulated providers regardless of environment. Payments settle on an accelerated clock, and you can force declines, returns and approvals on demand. Writes to an isolated test ledger.
Live mode
X-API-Key: dt_live_...
Routes to the real bank rails and moves real money. Same request shapes, same webhooks, same ledger semantics — the only difference from test is that it's real. Live data is fully isolated from test data.
The key's prefix is the switch — dt_test_ or dt_live_. Nothing else in your integration changes, so the same code path you tested is the one that goes live.
Forcing outcomes with test data
In test mode, specific amounts and counterparty values trigger deterministic outcomes, so you can exercise every branch of your integration — including the unhappy paths that are hard to reproduce against a real bank.
| To get | Do this in test mode | You'll see |
|---|---|---|
| A clean settlement | Any ordinary amount | payment_order.pending → payment_order.completed |
| An approval hold | A large amount over the risk threshold | PendingApproval until approved |
| A risk decline | An amount past the hard-decline ceiling | payment_order.failed · risk_declined |
| An ACH return | A test routing/account flagged for return | payment_order.returned · return code |
| A card decline | An authorization over the funded balance | Declined · insufficient_funds |
Confirm your webhooks before you go live
Send a real signed test event
Trigger a webhook.test delivery to your endpoint — a real, HMAC-signed delivery from the outbox, so you can prove your signature verification and your 2xx acknowledgement work end-to-end.
Inspect deliveries
Every attempt — status, response code, retries and dead-letters — is visible so you can debug without guessing. Replay any event once your endpoint is healthy. See Events & webhooks →