Both endpoints are only available to test apps. Calling them with a live API key (
sk_live_app_*) returns a test_app_required error. The browser-based Playground uses the same underlying pipeline.How it works
- You
POSTto the inbound endpoint withfrom,to, andtext. - Chirp accepts the request synchronously (
202 Accepted) and queues an internal webhook event. - The same processing pipeline that handles real Telnyx (SMS) or Meta (WhatsApp) webhooks runs against the simulated event.
- Your configured
messages.sms.received(SMS) ormessages.whatsapp.received(WhatsApp) webhook fires, exactly as if the message were real.
Authentication
Use a test app key (sk_test_app_*). If you’ve set up a production / test app pair, the test key belongs to the test app linked to your live app.
Phone number behavior
You don’t need to allocate theto phone number to your test app first. On the first inbound simulation to a number that isn’t yet known, Chirp auto-creates a system phone number record and links it to your test app. Subsequent simulations to the same to number reuse that record.
This means a fresh test app can start receiving simulated traffic immediately — no setup required.
Simulate an inbound SMS
Send aPOST request to /v1/playground/sms/inbound:
Simulate inbound SMS
202 Accepted
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
from | string (E.164) | yes | Phone number simulating the external user (the sender). |
to | string (E.164) | yes | Your Chirp phone number that should receive the simulated message. |
text | string | yes | Message text content delivered to your webhook. |
subject | string | no | Optional subject line (MMS-style). |
Simulate an inbound WhatsApp message
Send aPOST request to /v1/playground/whatsapp/inbound:
Simulate inbound WhatsApp message
202 Accepted
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
from | string (E.164) | yes | Phone number simulating the external WhatsApp user (the sender). |
to | string (E.164) | yes | Your WhatsApp Business phone number that should receive the simulated message. |
text | string | yes | Message text content delivered to your webhook. |
Only WhatsApp text messages can be simulated via this endpoint today. To simulate media, voice, image, or sticker messages, use the browser-based Playground.
Errors
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_phone_number | from or to is not in E.164 format. |
| 401 | — | Missing or invalid API key. |
| 403 | test_app_required | A live API key was used. Switch to your test API key. |
Using it in tests
A typical end-to-end test looks like this:- Boot your application against your test app keys.
POSTto/v1/playground/sms/inbound(or the WhatsApp variant) with the message you want to simulate.- Assert that your webhook handler received the expected
messages.sms.received(ormessages.whatsapp.received) event and that any side effects (DB writes, outbound replies, etc.) ran as expected.