SendNeo Test Mode
Test mode
Test mode lets you build and verify an integration without sending real email. Test keys start with sn_test_, and test sends are free and unlimited. They never reach a real inbox.
Deterministic recipients
Use these addresses to force a known outcome:
| Address | Simulated result |
|---|---|
delivered@test.sendneo.dev |
delivered |
bounced@test.sendneo.dev |
bounced |
complained@test.sendneo.dev |
complained |
| Any other address | delivered |
A test call accepts a maximum of 50 recipients. Split larger test fixtures into multiple requests and keep an idempotency key on retries.
Example
export SENDNEO_API_KEY='sn_test_your_key'
curl https://sendneo.yorkermedia.com/api/emails \
-X POST \
-H "Authorization: Bearer $SENDNEO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: test-delivery-001" \
-d '{
"from":"Test <hello@mail.example.com>",
"to":["delivered@test.sendneo.dev","bounced@test.sendneo.dev","complained@test.sendneo.dev"],
"subject":"SendNeo integration test",
"text":"Verify the status of each recipient."
}'
The request returns a message ID. Poll GET /emails/{id} or register webhooks for the resulting events. A bounce or complaint generated by a test key does not send a real complaint to a mailbox; it is a deterministic test result for your code.
What to test
- authentication and missing-key errors;
- JSON validation and your error handling;
- idempotent retries after a timeout;
- scheduled messages and cancellation;
- batch requests up to 100 objects;
- attachment encoding and the 7 MB combined limit;
- webhook signature verification and stale timestamps;
- suppression and unsubscribe handling in your own application.
Use sn_test_ in local development, CI, and preview environments. Never put a live key in a fixture, browser bundle, or test log. When a live key is required for a final smoke test, send only to your own verified team addresses until account review is complete.
Test mode does not bypass domain requirements for request validation. Use a verified from domain in realistic integration tests so your production cutover does not discover a sender error later. See Quickstart, Sending, and Webhooks.