No invitation emails
When you send an envelope, recipients do not receive invitation emails. Signing links are still created so you can test flows manually or via the API.
A sandbox workspace lets you exercise the full Subnoto workflow without the side effects of a real send. In sandbox mode, envelope sending is simulated: no invitation emails go out, no credits are consumed, and signed PDFs use a test certificate rather than a production one.
Sandbox mode is designed for integration testing - try your API flows, embedded signing, and webhooks before you go live with customers.
No invitation emails
When you send an envelope, recipients do not receive invitation emails. Signing links are still created so you can test flows manually or via the API.
No credit usage
Webapp sends do not consume SES credits. Public API sends do not consume API credits.
Test signatures
Completed documents are signed with a development certificate. External PDF verifiers will not treat them as legally binding production signatures.
SMS verification simulated
SMS OTP requests succeed but no text message is sent and no OTP is stored. Use email verification or other flows when testing SMS-gated signing in sandbox.
Sandbox mode can only be enabled or disabled through the public API. The webapp does not expose a sandbox toggle in Settings.
Create a dedicated workspace for testing and keep your production workspaces in normal mode. Do not enable sandbox on your default workspace unless you intend to use it only for tests.
Create a test workspace (if you do not have one yet)
curl -X POST http://your-proxy:8080/public/workspace/create \ -H "Authorization: Bearer $ACCESS_KEY:$SECRET_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Integration tests", "colorHex": "#6366F1" }'Save the workspace.uuid from the response. New workspaces start with "sandbox": false.
Turn on sandbox mode
curl -X POST http://your-proxy:8080/public/workspace/update \ -H "Authorization: Bearer $ACCESS_KEY:$SECRET_KEY" \ -H "Content-Type: application/json" \ -d '{ "workspaceUuid": "your-workspace-uuid", "sandbox": true }'Confirm the flag
List or get the workspace and check that "sandbox": true:
curl -X POST http://your-proxy:8080/public/workspace/list \ -H "Authorization: Bearer $ACCESS_KEY:$SECRET_KEY" \ -H "Content-Type: application/json" \ -d '{}'Run your tests
Create envelopes, send them, open signing links, trigger webhooks, and download results - all within this workspace without charging credits or emailing real recipients.
Disable sandbox when done
curl -X POST http://your-proxy:8080/public/workspace/update \ -H "Authorization: Bearer $ACCESS_KEY:$SECRET_KEY" \ -H "Content-Type: application/json" \ -d '{ "workspaceUuid": "your-workspace-uuid", "sandbox": false }'Using the TypeScript SDK (connects directly to https://enclave.subnoto.com):
const { data, error } = await client.POST("/public/workspace/update", { body: { workspaceUuid: "your-workspace-uuid", sandbox: true }});Team members can use a sandbox workspace in the webapp like any other workspace: upload documents, add recipients, send envelopes, and track progress. The same sandbox rules apply when sending from the webapp.
A few webapp behaviours differ:
sandbox field via the API if you need
to confirm which workspaces are in test mode.Check the following:
sandbox is trueExpected behaviour:
Expected behaviour:
Solution:
POST /public/workspace/updateSummary: Create a dedicated test workspace, set sandbox: true via the public API, run your integration
tests without emails or credits, then set sandbox: false before production use.