Test mode
A key created with the Test mode (ak_test_…) sends through the ACE SEND sandbox. It works like live sending — same endpoints, same checks, same webhooks — but nothing reaches a phone and nothing is charged.
What is the same
- The request is checked like a live one: the number, the template and its language, the variables, the SMS segments and the stop lists. A request that would be refused live is refused in test.
- The message gets an id, goes through its statuses and sends webhooks to your address.
GET /v1/messagesandGET /v1/messages/{id}work as usual.
What is different
| Test key | Live key | |
|---|---|---|
| Delivery | the sandbox plays the statuses; nothing is sent | the provider sends the message |
| Price | free: price is null | fixed at acceptance and charged |
| Balance and its reserve | not touched | reserved at acceptance |
| Daily limit | 1000 messages a day per account | the daily limit of the account |
test in the message and its webhooks | true | false |
SMS from | null | the sender name |
| Reports of the console | not counted | counted |
A test key sees only test messages and a live key only live ones: GET /v1/messages/{id} of a message of the other mode answers 404. The console shows both in the message log, with a filter for test messages.
Sandbox numbers
The sandbox decides what happens by the last four digits of the number. The number must still be a valid number of its country (for example +5521998120000), or the request is refused with invalid_number before the sandbox.
| Channel | Number ends with | What happens |
|---|---|---|
| anything else | sent after 1 s, delivered after 3 s, read after 10 s | |
0000 | sent after 1 s, then failed with no_whatsapp after 3 s | |
0001 | rejected with invalid_number at once | |
0002 | sent after 1 s, delivered after 3 s, never read | |
| SMS | anything else | sent after 1 s, delivered after 3 s |
| SMS | 0000 | sent after 1 s, then expired with expired after 3 s |
| SMS | 0001 | rejected with invalid_number at once |
| SMS | 0003 | rejected with sender_rejected at once |
| SMS | 0004 | sent after 1 s, then failed with blocked after 3 s |
Times are counted from the moment of acceptance; under load the statuses may come a little later.
Moving to live
Swap the key. Requests stay the same. Keep in mind:
- live messages are paid: keep the balance topped up and handle
insufficient_funds; - the daily limit of the account applies (
daily_limit_reached); - an
Idempotency-Keyused by a test key cannot be reused by a live key (409 idempotency_conflict) — the keys of both modes share one set of idempotency keys.