CLI reference
SMS commands
sendmock sms delete
Delete one message.
sendmock sms delete <smsId> [flags]
| Argument | Type | Description |
|---|
| <smsId>required | string | The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D |
| Flag | Type | Description |
|---|
| --yes | boolean | 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
| Flag | Type | Description |
|---|
| --yes | boolean | 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]
| Flag | Type | Description |
|---|
| --from <from>required | string | Who texts your app: the user's number.Example: +8801700000000 |
| --to <to>required | string | Your app's number that receives it, usually a virtual number.Example: +15550001111 |
| --body <body>required | string | 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]
| Flag | Type | Description |
|---|
| --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>
| Argument | Type | Description |
|---|
| <smsId>required | string | The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D |
| <mediaIndex>required | integer | 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]
| Argument | Type | Description |
|---|
| <smsId>required | string | The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D |
| Flag | Type | Description |
|---|
| --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>
| Argument | Type | Description |
|---|
| <smsId>required | string | 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>
| Argument | Type | Description |
|---|
| <smsId>required | string | 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]
| Flag | Type | Description |
|---|
| --from <from>required | string | The sender: an E.164 number or an alphanumeric sender ID.Example: +15550001111 |
| --to <to>required | string | The recipient, an E.164 number; whatsapp:+... sends over WhatsApp.Example: +8801700000000 |
| --body <body>required | string | 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>
| Argument | Type | Description |
|---|
| <smsId>required | string | 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]
| Argument | Type | Description |
|---|
| <smsId>required | string | The SMS's ID, from GET /api/v1/sms.Example: 01JB7T9Q2R5W8X3Y6Z1A4B7C9D |
| <status>required | string | The new status; fires the status callback and the matching event.One of: queued, sent, delivered, undelivered, failed, receivedExample: delivered |
| Flag | Type | Description |
|---|
| --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]
| Flag | Type | Description |
|---|
| --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