Preview: SendMock has no stable release yet. These docs follow develop.

CLI reference

SMS commands

sendmock sms delete

Delete one message.

sendmock sms delete <smsId> [flags]
ArgumentTypeDescription
<smsId>requiredstring
The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D
FlagTypeDescription
--yesboolean
Confirms a destructive command; without it the command stops.

Example

sendmock sms delete 01JB7T9Q2R5W8X3Y6Z1A4B7C9D --yes

Output with --json: nothing. Exit codes: 0, 1, 2.

API
DELETE/api/v1/sms/{smsId}
MCP tool
sendmock_sms_delete
In the app
SMS > message menu > Delete

sendmock sms delete-all

Delete every message.

sendmock sms delete-all --yes
FlagTypeDescription
--yesboolean
Confirms a destructive command; without it the command stops.

Example

sendmock sms delete-all --yes

Output with --json: nothing. Exit codes: 0, 1, 2.

API
DELETE/api/v1/sms
MCP tool
sendmock_sms_delete_all
In the app
Settings > General > Delete all SMS

sendmock sms inbound

Simulate a message from a contact to one of your numbers.

sendmock sms inbound [flags]
FlagTypeDescription
--from <from>requiredstring
Who texts your app: the user's number.Example: +8801700000000
--to <to>requiredstring
Your app's number that receives it, usually a virtual number.Example: +15550001111
--body <body>requiredstring
The message text.Example: STOP
--channel <channel>string
sms (default) or whatsapp.One of: sms, whatsappExample: sms
--template-id <template-id>string
The payload template for the inbound webhook, instead of the number's (e.g. twilio.inbound_sms).Example: twilio.inbound_sms
--media <media>InlineSmsMedia[] (JSON)
Files sent with the message, as MMS or WhatsApp media.Example: [{"filename":"photo.jpg","content":"/9j/4AAQSkZJRgABAQ==","content_type":"image/jpeg"}]
--webhook <webhook>string[] (repeat for more)
Send this action's webhooks to exactly these endpoints (IDs from GET /api/v1/webhooks/endpoints) instead of the ones the rules pick; an empty list sends none. Leave it out to let the rules decide.Example: ["01JB7T9Q2RENDPOINT00000000"]
--webhook-requests <webhook-requests>WebhookRequestEdit[] (JSON)
Payloads edited for this action, by endpoint: each body is sent as written instead of the rendered one and signed over those bytes. Leave it out to send the rendered payloads.Example: [{"endpoint_id":"01JB7T9Q2RENDPOINT00000000","event_type":"email.bounced","body":"{\"type\":\"email.bounced\",\"data\":{\"reason\":\"edited\"}}","headers":{"x-tenant":"acme"}}]

Example

sendmock sms inbound --from +8801700000000 --to +15550001111 --body STOP --channel sms --webhook 01JB7T9Q2RENDPOINT00000000

Output with --json: SmsMessageDetail. Exit codes: 0, 1, 2.

API
POST/api/v1/sms/inbound
MCP tool
sendmock_sms_simulate_inbound
In the app
SMS > conversation > Reply as recipient

sendmock sms list

SMS and WhatsApp messages, newest first, with filters.

sendmock sms list [flags]
FlagTypeDescription
--cursor <cursor>string
The next_cursor of the previous page.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D
--limit <limit>integer
Items per page, 1 to 200 (default 50).Example: 50
--query <query>string
Number or text.Example: code
--from <from>string
Sender number.Example: +15550001111
--to <to>string
Recipient number.Example: +8801700000000
--status <status>string
Delivery status.One of: queued, sent, delivered, undelivered, failed, receivedExample: delivered
--direction <direction>string
Outbound from your app or inbound to it.One of: outbound, inboundExample: outbound
--thread-id <thread-id>string
Only this conversation.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D
--project <project>string
Only this project's messages (its key); every project's when not set.Example: shop

Example

sendmock sms list --cursor 01JB7T9Q2R5W8X3Y6Z1A4B7C9D --limit 50

Output with --json: PageOf_SmsMessage. Exit codes: 0, 1, 2.

API
GET/api/v1/sms
MCP tool
sendmock_sms_list
In the app
SMS

sendmock sms media

Download one media item of an MMS or WhatsApp message.

sendmock sms media <smsId> <mediaIndex>
ArgumentTypeDescription
<smsId>requiredstring
The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D
<mediaIndex>requiredinteger
Position of the media file in the SMS's media, starting at 0.Example: 0

Example

sendmock sms media 01JB7T9Q2R5W8X3Y6Z1A4B7C9D 0

Output with --json: file (*/*). Exit codes: 0, 1, 2, 3.

API
GET/api/v1/sms/{smsId}/media/{mediaIndex}
MCP tool
sendmock://sms/{smsId}/media/{mediaIndex}
In the app
SMS > message > media

sendmock sms open

Record a read and fire sms.opened.

sendmock sms open <smsId> [flags]
ArgumentTypeDescription
<smsId>requiredstring
The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D
FlagTypeDescription
--source <source>string
Who opened it: ui (the SendMock UI), manual (a person marking it) or api (a script). Defaults to api.One of: ui, manual, apiExample: api
--user-agent <user-agent>string
The browser or client that opened it, kept in the open history. The UI sends its own.Example: Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5)
--webhook <webhook>string[] (repeat for more)
Send this action's webhooks to exactly these endpoints (IDs from GET /api/v1/webhooks/endpoints) instead of the ones the rules pick; an empty list sends none. Leave it out to let the rules decide.Example: ["01JB7T9Q2RENDPOINT00000000"]
--webhook-requests <webhook-requests>WebhookRequestEdit[] (JSON)
Payloads edited for this action, by endpoint: each body is sent as written instead of the rendered one and signed over those bytes. Leave it out to send the rendered payloads.Example: [{"endpoint_id":"01JB7T9Q2RENDPOINT00000000","event_type":"email.bounced","body":"{\"type\":\"email.bounced\",\"data\":{\"reason\":\"edited\"}}","headers":{"x-tenant":"acme"}}]

Example

sendmock sms open 01JB7T9Q2R5W8X3Y6Z1A4B7C9D --source api --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5)'

Output with --json: nothing. Exit codes: 0, 1, 2, 3.

API
POST/api/v1/sms/{smsId}/open
MCP tool
sendmock_sms_open
In the app
SMS > message menu > Simulate read

sendmock sms opens

Every recorded read of an outbound message, oldest first.

sendmock sms opens <smsId>
ArgumentTypeDescription
<smsId>requiredstring
The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D

Example

sendmock sms opens 01JB7T9Q2R5W8X3Y6Z1A4B7C9D

Output with --json: OpenRecord[]. Exit codes: 0, 1, 2, 3.

API
GET/api/v1/sms/{smsId}/opens
MCP tool
sendmock_sms_opens
In the app
SMS > message ticks (read)

sendmock sms resend-reply-webhook

Send an inbound message's reply webhook again.

sendmock sms resend-reply-webhook <smsId>
ArgumentTypeDescription
<smsId>requiredstring
The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D

Example

sendmock sms resend-reply-webhook 01JB7T9Q2R5W8X3Y6Z1A4B7C9D

Output with --json: SmsMessageDetail. Exit codes: 0, 1, 2, 3.

API
POST/api/v1/sms/{smsId}/reply-webhook/resend
MCP tool
sendmock_sms_reply_webhook_resend
In the app
SMS > Message details > Reply webhook > Resend reply webhook

sendmock sms send

Native send, with optional media URLs or inline media.

sendmock sms send [flags]
FlagTypeDescription
--from <from>requiredstring
The sender: an E.164 number or an alphanumeric sender ID.Example: +15550001111
--to <to>requiredstring
The recipient, an E.164 number; whatsapp:+... sends over WhatsApp.Example: +8801700000000
--body <body>requiredstring
The message text. Its length and characters decide the segments and the encoding (GSM-7 or UCS-2).Example: Your code is 482913
--status-callback <status-callback>string
Your app's URL that receives each status change (queued, sent, delivered, failed).Example: http://localhost:3000/sms/status
--metadata <metadata>object (JSON)
Any JSON you want stored with the message and echoed in its events.
--media-url <media-url>string[] (repeat for more)
Public links SendMock downloads, like Twilio's MediaUrl.Example: ["https://example.test/receipt.png"]
--media <media>InlineSmsMedia[] (JSON)
Files sent inline as MMS media, base64 encoded.Example: [{"filename":"photo.jpg","content":"/9j/4AAQSkZJRgABAQ==","content_type":"image/jpeg"}]

Example

sendmock sms send --from +15550001111 --to +8801700000000 --body 'Your code is 482913' --status-callback http://localhost:3000/sms/status --media-url https://example.test/receipt.png

Output with --json: SmsMessageDetail. Exit codes: 0, 1, 2.

API
POST/api/v1/sms
MCP tool
sendmock_sms_send
In the app
Settings > Connection > Send this request

sendmock sms show

One message with its status history and callbacks.

sendmock sms show <smsId>
ArgumentTypeDescription
<smsId>requiredstring
The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D

Example

sendmock sms show 01JB7T9Q2R5W8X3Y6Z1A4B7C9D

Output with --json: SmsMessageDetail. Exit codes: 0, 1, 2, 3.

API
GET/api/v1/sms/{smsId}
MCP tool
sendmock_sms_get
In the app
SMS > message > Message details

sendmock sms status

Set a delivery status by hand and fire its callback.

sendmock sms status <smsId> <status> [flags]
ArgumentTypeDescription
<smsId>requiredstring
The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D
<status>requiredstring
The new status; fires the status callback and the matching event.One of: queued, sent, delivered, undelivered, failed, receivedExample: delivered
FlagTypeDescription
--error-code <error-code>string
A Twilio error code for failed or undelivered, e.g. 30003 (unreachable).Example: 30003
--webhook <webhook>string[] (repeat for more)
Send this action's webhooks to exactly these endpoints (IDs from GET /api/v1/webhooks/endpoints) instead of the ones the rules pick; an empty list sends none. Leave it out to let the rules decide.Example: ["01JB7T9Q2RENDPOINT00000000"]
--webhook-requests <webhook-requests>WebhookRequestEdit[] (JSON)
Payloads edited for this action, by endpoint: each body is sent as written instead of the rendered one and signed over those bytes. Leave it out to send the rendered payloads.Example: [{"endpoint_id":"01JB7T9Q2RENDPOINT00000000","event_type":"email.bounced","body":"{\"type\":\"email.bounced\",\"data\":{\"reason\":\"edited\"}}","headers":{"x-tenant":"acme"}}]

Example

sendmock sms status 01JB7T9Q2R5W8X3Y6Z1A4B7C9D delivered --error-code 30003 --webhook 01JB7T9Q2RENDPOINT00000000

Output with --json: SmsMessageDetail. Exit codes: 0, 1, 2, 3.

API
POST/api/v1/sms/{smsId}/status
MCP tool
sendmock_sms_set_status
In the app
SMS > Message details > Set status

sendmock sms threads

Conversations, one per contact and your number.

sendmock sms threads [flags]
FlagTypeDescription
--project <project>string
Only this project's messages (its key); every project's when not set.Example: shop

Example

sendmock sms threads --project shop

Output with --json: SmsThread[]. Exit codes: 0, 1, 2.

API
GET/api/v1/sms/threads
MCP tool
sendmock_sms_threads
In the app
SMS > conversation list