Make SMS from your own number: send and receive
Checked against the docs:
In Make you send an SMS with the HTTP → Make a request module: POST https://smsportal.app/api/v1/gateway/send-sms with your API key in an x-api-key header and JSON containing recipients and message. Replies arrive at a Webhooks → Custom webhook trigger, because smsportal posts a MESSAGE_RECEIVED event to it. The text goes out from your own Android phone, so customers see your number and can reply.
What you need
- A Make account (the HTTP and Webhooks apps are built in, nothing to install).
- A smsportal account with an Android phone and SIM card connected.
- An API key from the smsportal dashboard (API Keys → Generate API Key).
- Recipient numbers in international format, for example
+14155550123.
How to send an SMS from Make
Add the HTTP → Make a request module
In your scenario add the HTTP app and the Make a request module. Set URL to
https://smsportal.app/api/v1/gateway/send-smsand Method toPOST.Store the API key in Credentials
Set Authentication type to
API key, then create a key under Credentials: Namesmsportal, Key is the bare key from the dashboard (no prefix), API key placementIn the header, API key parameter namex-api-key. Make keeps the key in Keys, so it stays out of the Headers field and you rotate it in one place.Paste the JSON body
Body content type
application/JSON, Body input methodJSON string, then paste the JSON below.{{1.phone}}and{{1.name}}are fields from module 1: delete them and insert your own from the mapping panel. Optionally adddeviceId(several phones),simSubscriptionId(dual-SIM phone) orscheduledAt(send later, ISO 8601 time).Body content (JSON string){ "recipients": ["{{1.phone}}"], "message": "Hi {{1.name}}, we got your request. Reply to this number if you have questions." }Stop on errors
Set Parse response to
Yes. In Advanced settings turn on Return error if HTTP request fails, so a 401, 400 or 429 stops the scenario and shows up in the history.Test with your own number
Put your own number in for the test and click Run once. A 200 response with a
datafield means the message is queued. The status (sent, delivered) shows up in the smsportal dashboard.
How to receive a customer reply in Make
When the phone receives an SMS, smsportal POSTs JSON to your webhook URL. Make splits the JSON into mappable fields: sender (the number), message (the text), receivedAt and webhookEvent. Every request carries an X-Signature header: a hex HMAC-SHA256 of the raw body, keyed with your signing secret.
- Create a new scenario with a Webhooks → Custom webhook trigger. Next to the Webhook field click **Add**, enter a Webhook name, click **Save** and copy the generated URL.
- In the smsportal dashboard open Webhooks → Create Webhook, paste the URL, enter a signing secret (at least 20 characters) and tick
MESSAGE_RECEIVED. - Click Run once and text your phone from another number. Make detects the fields so you can map them, for example
SMS from {{1.sender}}: {{1.message}}. When you later add fields or events, click **Detect new values** in the module and send another text. - Activate the scenario. The webhook starts it as soon as each SMS arrives, and Make's default response (200
Accepted) is enough, so you do not need a Webhook response module. - To verify the signature, turn on Get request headers and JSON pass-through in the webhook's Advanced settings. The
sha256function with your secret as the key andhexencoding hashes the raw body; compare it with thex-signatureheader in a filter, then extract the fields with JSON → Parse JSON.
{
"smsId": "6720f0c2a1b2c3d4e5f60718",
"message": "Confirmed, see you then",
"deviceId": "671f9e10a1b2c3d4e5f60001",
"webhookSubscriptionId": "671fa001a1b2c3d4e5f60002",
"webhookEvent": "MESSAGE_RECEIVED",
"idempotencyKey": "3f1c9a8e-5d2b-4c7a-9e1f-2b6d8c0a4e57",
"sender": "+14155550123",
"receivedAt": "2026-10-28T09:41:00.000Z"
}Ready-made scenarios
A form submission gets a confirmation text
Typeform → Watch Responses or Google Forms → Watch Responses starts the scenario and HTTP Make a request texts the number from the form. Make the phone field collect the country code, or the API rejects the recipient.
Customer replies land in a sheet or CRM
Custom webhook on
MESSAGE_RECEIVED, then Google Sheets → Add a Row withsender,messageandreceivedAtcolumns. Instead of a sheet you can search your CRM for thesendernumber and add the text as a note.A daily send from a sheet in one request
A daily schedule, Google Sheets → Search Rows picks today's rows, an Array aggregator collects them into a list, and one HTTP module sends it to
https://smsportal.app/api/v1/gateway/send-bulk-smsasmessages(each item has its ownrecipientsandmessage). One request uses one credit instead of one per row.
Errors and fixes
- The HTTP module returns 401
- Cause: The key went into an
Authorizationheader instead ofx-api-key, has a prefix in front of it, or is wrong. - Fix: In Credentials set API key parameter name to
x-api-keyand put the bare key from the dashboard in Key. Check for leading or trailing spaces. - 400 on some messages only
- Cause: The mapped text contains a double quote or a line break, and
JSON stringmode does not escape them, so the JSON is invalid. - Fix: Switch Body input method to
Data structure:recipientsas an array of text,messageas text. Make escapes special characters for you. - 400 on every send
- Cause: No enabled phone on the account, an unverified email, or
recipientsis not a list. - Fix: Check in the dashboard that a phone is enabled and your email is verified.
recipientsmust look like["+14155550123"]. - The API returns 200 but nothing is sent
- Cause: The phone is offline or Android puts the app to sleep.
- Fix: Check signal, internet and the phone status screen in the dashboard. Queued messages wait up to 72 hours, then expire.
- The webhook stopped taking texts
- Cause: The scenario is inactive, or the webhook was not attached to any scenario for over 5 days and Make now returns
410 Gone. smsportal stops retrying after 3 attempts that get a 4xx, and pauses a subscription that keeps failing. - Fix: Attach the webhook to a scenario and activate it. Then check the subscription under Webhooks in the smsportal dashboard.
- 429 when sending
- Cause: The SMS limit of your plan is used up.
- Fix: The response body says which limit ran out. Check the counter in the dashboard or change plans on the pricing page.
Frequently asked questions
Is there a native smsportal app in Make?
No. Two built-in Make apps are enough: HTTP (the Make a request module) to send and Webhooks (Custom webhook) to receive replies.
How many Make credits does one SMS use?
Make bills in credits (operations until August 2025). For non-AI apps one module run is one credit, so a scenario with a trigger and an HTTP module usually uses two credits per message. smsportal does not charge per message: your SIM plan pays the carrier.
How many texts can Make send at once?
Make fires requests quickly, but the phone sends with a pause between messages (5 seconds by default, about 720 per hour per phone). Spread large batches over time or add another phone.
Does Make know the SMS was delivered?
The HTTP module response only says the message was queued. Sending and delivery are reported by the `MESSAGE_SENT` and `MESSAGE_DELIVERED` events, which you can catch with a separate Custom webhook.
Can I use this for marketing campaigns?
No. From a SIM card, send messages the customer expects: confirmations, reminders, replies. Bulk campaigns belong with an SMS provider that sends under a sender name.
Sources
- Make: HTTP (Make a request)
- Make: API key authentication type
- Make: Webhooks (Custom webhook)
- Make: Webhooks, queue and limits
- Make: Credits
- smsportal API documentation
More in the guides
Send your first SMS today
Create a free account, connect your phone and see how customers respond to messages from your number.