Get started
Quickstart: your first sandbox message
In about ten minutes you will create an API key, send a WhatsApp message from your sandbox number, and watch it move from queued to delivered to read. Nothing here reaches a real phone and nothing is billed.
1. Create an account
Sign up and confirm your e-mail. Every new account gets a sandbox automatically: a test WhatsApp sender that is already connected, so you do not need a Meta Business account to start.
2. Create a sandbox API key
- In the console, open Developer → API keys and make sure the environment switch says Sandbox.
- Create a key. Copy the secret: it starts with
sk_test_and is shown only once. - Copy your account SID (
AC…; every console address carries it asaccountSid=AC…) and your sandbox sender SID (WA…, listed under Senders).
export SHIPMESSAGES_API_KEY="sk_test_..."
export SHIPMESSAGES_ACCOUNT_SID="AC..."
export SHIPMESSAGES_SANDBOX_SENDER_SID="WA..."3. Choose HTTPS or an SDK
Use the curl examples below to call the API directly. The pre-release SDKs are packaged, but public registry publication is pending. The SDK tabs document their interfaces for the upcoming release.
4. Send a message
+15550000001 is a sandbox test number: every message to it is sent, delivered and read within a few seconds. See all test numbers.
curl -X POST "https://api.shipmsg.com/v1/accounts/$SHIPMESSAGES_ACCOUNT_SID/messages" \
-H "Authorization: Bearer $SHIPMESSAGES_API_KEY" \
-H "ShipMessages-Version: 2026-08-21" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"from": "'"$SHIPMESSAGES_SANDBOX_SENDER_SID"'",
"to": "+15550000001",
"type": "text",
"text": {
"body": "Hello from the ShipMsg sandbox"
}
}'The answer is 202 Accepted with the new message:
{
"object": "message",
"sid": "SM4AZTTK56XRT49RC2FGMFK4XYJG",
"status": "queued",
"direction": "outbound",
"from": "WA…",
"to": { "identifierType": "phone_e164", "value": "+15550000001", "contactSid": "CT…" },
"type": "text",
"livemode": false,
…
}5. Watch it get delivered
Read the message back after a few seconds:
curl "https://api.shipmsg.com/v1/accounts/$SHIPMESSAGES_ACCOUNT_SID/messages/SM..." \
-H "Authorization: Bearer $SHIPMESSAGES_API_KEY"Its status moves queued → sent → delivered → read. In a real integration you do not poll: you receive each change as a message.sent, message.delivered and message.read event. The console shows the same history under Messages.
Next steps
- Set up a webhook to receive statuses and replies.
- Send to
+15550000012: it replies “hello” five seconds after delivery, so you can test inbound messages. - Outside the sandbox, the first message to a customer must be an approved template.
- When you are ready, connect your own number in the console and switch to an
sk_live_key.