This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.



This plugin enables you to send SMS messages straight from the WordPress backend or via the programmer’s API.

Also included is a free SMS two-factor authentication module, which hardens the security of your site considerably.

All you need is the plugin and a free account.

Main features:

  • 📱 Send SMS messages / texts

    • Add custom data to recipients to perform mail merge.
    • Import recipient lists from CSV/Excel.
    • Manage target groups.
    • Manage broadcasts.
    • Easy-to-use programmer’s API.
    • Short codes for signup/unsubscribe/edit profile forms.
    • Automatic integration with Contact Form 7.
  • 🔐 Two-factor authentication

    • Easy-to-use: No apps needed!
    • Easy for admins: Just tick a box and it works!
    • High level of security!
    • Pick roles to enable mandatory two-factor authentication.
    • Re-authorise at each login or remember devices for up to 30 days.
  • ✊ Receive SMS messages

    • Use your own keyword(s) or phone numbers to receive SMS messages.
    • View incoming messages.
    • Auto-reply to incoming SMS messages.
  • 🔔 Notification module for admins (BETA)

    • Receive an SMS message when important changes occur.
    • Choose from a long list of triggers.
    • Receive an SMS when a new user is created, when certain pages are edited or when new pages are published.
    • Configure which users will receive SMS messages. Can be role-based or user-based.
    • BETA: Please write to us and let us know what you like, and what you feel is missing (or broken), so we can improve upon this new feature.

Easy to get started:

  • Complete step-by-step user guide with several screenshots
  • The plugin has help texts included.
  • Live chat support and mail support from

SMS messages provided by one of the leading SMS Gateways in Europe

  • sends hundreds of millions of SMS messages each year on behalf of tens of thousands of customers all over the globe.
  • Offices in Copenhagen, Odense and Aalborg, Denmark.
  • Company founded in 1999.
  • Free support, no subscription, AND unbeatable prices.
  • Most SMS messages are delivered within 0.3 seconds.

If you prefer to disable the UI-features and manage broadcasts from code instead, then that is also possible. For this purpose, you can use the method gwapi_send_sms. The method supports specification of content, broadcast to multiple recipients, specification of sender ID and specification of type of SMS.

Getting Started

We have created a number of tutorials, demonstrating how to get started and how to use the various features. Watch the following video on how to set everything up and send your first SMS message:

Click here for more videos.

How to use

Most users: User Guide

Most topics are shown in a step-by-step style with numerous screenshots in our User Guide – even quite advanced topics.

Open the User Guide

Advanced: Programmers API

Send an SMS message to one or multiple recipients by calling gwapi_send_smswith the following arguments

  • $message (string) A string containing the message to be sent.
  • $recipients (array|string) A single recipient or a list of recipients.
  • $sender (string, optional) Sender text (11 chars or 15 digits)
  • $destaddr (string, optional) Type of SMS – Can be MOBILE (regular SMS) or DISPLAY (shown immediately on phone and usually not stored, also knows as a Flash SMS)

Returns the message-ID on success and a WP_Error on failure.

The recipients-argument may consist of either:

  • An integer or string, containing an MSISDN (CC + number, digits only).
    Example number: Country code 45. Phone number: 12 34 56 78.
    Resulting MSISDN: “4512345678”.
  • An array containing MSISDN (see above).
  • An array in which MSISDN’s are keys and their values are arrays of tags.
    Example in JSON:
    { “4512345678”: { “%NAME%”: “John Doe”, “%GENDER%”: “Male” } }

Note: SMS messages sent via gwapi_send_sms are NOT saved in WordPress. They are however still accessible via the traffic log on


Set up your OAuth key and secret here. This settings page is available for administrators only.

If the SMS Sending UI is enabled, this is how you can send an SMS from the backend.

Contact Form 7: GatewayAPI automatically adds extra controls for supporting signup/update/unsubscribe in the Contact Form 7 form builder.

Contact Form 7: Creating a “recipient groups” selection field.


  • Set up your OAuth key and secret here. This settings page is available for administrators only.
  • If the SMS Sending UI is enabled, this is how you can send a SMS from the backend.
  • Contact Form 7: GatewayAPI automatically adds extra controls for supporting signup/update/unsubscribe in the Contact Form 7 form builder.
  • Contact Form 7: Creating a “recipient groups” selection field.


This section describes how to install and use the plugin

  1. If you haven’t already, then go to and create a free account.
  2. Install and activate the plugin.
  3. Go to “Settings » GatewayAPI Settings” and add an OAuth key and associated secret from your account.
  4. (Optional) Enable the sending UI and then go to “SMS messages » Create SMS” and try to send an SMS to yourself, verifying that all has been set up correctly.

We’ve also produced a number of videos to help you get started:


This quick tutorial shows you how to get the GatewayAPI Plugin for WordPress installed and configured and how to send an SMS.


This quick tutorial shows you how to create groups, add recipients to the groups, as well as how to add custom fields to the individual recipients, which allows any extra data to be stored and used in SMS messages.


This tutorial shows you how to create forms for the public, using the built-in UI for creating “shortcodes” (tiny pieces of code which can be pasted into any WordPress-page).


This tutorial shows you how to import recipients from any spreadsheet and into the recipients database in GatewayAPI. It even shows how to overwrite and update the database, import extra fields from spreadsheets and how to add the recipients into groups. It works with any spreadsheet app (Excel, Numbers, LibreOffice, Google Docs – you name it!).


How well does this plugin handle 10,000+ recipients

It works really well. We split large SMS broadcasts into multiple smaller requests, to ease the burden on your WordPress setup. You will see a progress bar, when you are sending to more than 500 recipients at a time.

HELP! I’m administrator and I’m locked out of the two-factor system!

If you don’t have a backup of the “Emergency bypass URL” from the setup-screen, then you need to dig into the database to disable the two-factor system. Your host probably has a phpMyAdmin that you can use to access it.
Then find the options-table, by default wp_options. Search for the row where the option_name is gwapi_security_enable. Simply delete the row.


August 17, 2018
This plugin add´s a really good feature with two factor authentication trough sms, very easy to setup and configure. Works without any app just simple sms so everybody can use it. Good feature is that you can also configure how often you need to verify login with sms.
September 3, 2016
Have tried several free and premium sms plugins for WordPress, this one was by far the most stable and feature rich
September 3, 2016
If you want to send SMS’es from WordPress and manage a list of recipients, perhaps even group them, then this plugin is excellent. It’s simple and it just works. Also a nice touch that you get €2 free of send-credit. Should get most people started as the in general has some quite competitive pricing.
Read all 3 reviews

Contributors & Developers

“GatewayAPI” is open source software. The following people have contributed to this plugin.


“GatewayAPI” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “GatewayAPI” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • Compability up to WordPress 6.3.1.


  • Bugfix: Built in shortcode defaulted to the posts title as the name of the new recipient. Now defaults to ”, as expected.


  • Bugfix: Built in shortcode for signup did not work properly, when allowing the user to select groups.


  • Support for using our!
  • Bugfix: 2FA login security could fail on PHP 7.4+.


  • Bugfix: Fixing that GatewayAPI Shortcode for signup had stopped saving some meta-fields since 1.7.2.


  • Bugfix: Default country code did not apply correctly in the country drop downs.


Compability with Contact Form 7.

  • Bugfix: Signup via Contact Form 7 works again (upgraded to being compatible with CF7’s newer window.fetch based approach of AJAX).
  • Bugfix: Notices in CF7-integration (PHP) and a typo, causing an exception in frontend JS on CF7-forms.


Bugfix release.

  • Bugfix: Saving recipient details using the UI and via Excel-importer, works properly again.
  • Bugfix: SMS Reply-feature works again.


This release strengthens the overall security, thanks to input from an external security audit.

We highly recommend upgrading to this version, as it hardens the security of our plugin, especially on WordPress-installation with multiple users
which may have users of lower roles than editor.

  • Consistent use of nonce’s in AJAX requests, to prevent CSRF and prevent privilege escalation.
  • Enforce correct roles for various actions, preventing potential privilege escalation.
  • Improved sanitizing, validation and escaping of input and output.
  • All PHP-files are now secured from direct access.
  • Refactored function prefixes from gwapi_, _gwapi_ and _gatewayapi_ to gatewayapi_ only.


  • Bugfix: Notifications were not sent.


  • New: Notification module: Receive SMS-notifications when various actions occur in WordPress
    • BETA: Please get in touch if you have ideas/suggestions for improving this feature.
  • New: Default country code field setting (previously all country selectors defaulted to +45/Denmark).
  • New: Programmer actions gwapi_form_subscribe and gwapi_form_unsubscribe added. The first is triggered when new recipients complete signup via
    our shortcode-forms and the latter on unsubscription via the shortcode-forms.
  • Optimization: Removed various unneeded dependencies.
  • Danish translation updated, including the notification-module.
  • Readme updated to inform about notification-module and other text improvements.


  • New! Create Notifications to automatically notify recipients by SMS when a WP action is executed.


  • Bugfix: Prefix wasn’t specified for all instances of db_table usages.


  • Bugfix: Previously imported recipients was prevented from being re-imported if they had been deleted.


  • Bugfix: While using recipients import, group recipients was not counted correctly after the import was completed.


  • Improved: Import of recipients optimized.


  • Compatible with WordPress 5.5
  • Improved: Integration with Contact Form 7 now supports shortcode for mandatory fields
  • Tweak: Updated UI and descriptions.


  • Compatible with WordPress 5.4
  • New! Recipient groups can now default to unchecked when using short-code
  • Tweak: Minor updates to UI.


  • Tweak: The frontend forms now use regular SMS instead of Display SMS for two-factor, as requested by multiple users.
  • Bugfix: When using tags, the list of tags sent to GatewayAPI could end in a situation, with the same tag-data repeated.


  • Removed URL in two-factor SMS as it was unnecessary and caused SMS’es to be blocked by GatewayAPI’s new link-scanner.


  • New! Custom encoding for SMS’es, allowing SMS’es with emojis and other special characters.
    • UI which detects what encoding should be used, always recommending the cheapest option (ie. most characters per SMS).
    • API-method gwapi_send_sms has new argument for setting encoding.
    • Fully backwards-compatible, defaulting to standard-encoding.
  • Compatible with WordPress 5.1


  • Compable with WordPress 5.0.3.
  • Fix: Excel-export of recipients did not work unless “SMS Inbox” was enabled.
  • Fix: Notices in Excel-export.


  • Updated Danish translations (primarily the two-factor settings and frontend).
  • Fix: Our shortcode had unintentionally been renamed. We now support both [gwapi] and [gatewayapi].
  • Fix: Two-factor-module caused fatal error on PHP 5. Also fixed general notices in two-factor module.
  • Fix: Two-factor module caused fatal error when creating new WordPress-users.


  • New! Two-factor security upgrade to your WordPress! (optional)
  • New! Blacklisting of phone numbers.
  • Improved: Searching recipients by phone number works.
  • Improved: Better support for 10.000+ recipients + a progress bar for showing progress.


  • Recipients:
    • Added option to blacklist phone numbers.
    • Added support for searching recipients list by phone number (previously only by name).
    • Added drop down on recipients list, for filtering by group.
  • Fix: Improved handling of huge lists of recipients (ie. 1.000+ recipients in one SMS)


  • Fix: List of countries is now always correctly parsed, even when the JSON-file (which is fetched via AJAX) does not have right mime-type.


Note: v1.4.0 may break your Countact Form 7-forms containing GatewayAPI-fields, as the shortode-syntax has slightly changed for most of our fields. We needed to do this change to fix multiple bugs and inconsistencies. Please re-add the GatewayAPI-fields to your Contact Form 7-forms when updating the plugin.

  • Contact Form 7:

    • Ability to send SMS’es from the frontend.
    • Updating a subscriber: Forms now only updates groups specifically selected for the form.
    • Bugfixes and code cleanup, improved shortcode syntax.
  • Complete user guide for the system (available online).

  • Export of recipients to Excel and CSV-formats.


  • Contact Form 7: Added support for forms which also contained a reCaptcha-field.
  • Code cleanup


  • Bugfix: A menu item had gone missing in the backend.


  • New UI for creating automated actions. Currently supports “autoreply” based on keyword.


  • Support for receiving SMS’es added, including setup-wizard and inbox.


  • Bugfix: The new verification SMS for Contact Form 7 had a typo, breaking verification SMS’es.
  • Missing translations: The popup-messages related to verification were not translated to danish.


  • Better international phone numbers support: Prefixed 0’s in the phone number itself (between country prefix and phone number) is now correctly working.


  • User synchronization:
    • No longer requires a country code meta field, instead allowing a default country code when this value is missing.
    • Now possible to trigger a “one time” synchronization.
  • Contact Form 7:
    • Now possible to send an SMS-reply on form success automatically.
    • SMS-validation for signup, before allowing the form to submit successfully.
    • Bugfix: Validation now works for all GatewayAPI-fields.


  • Contact Form 7: Integration supporting signup, update and unsubscribe forms for frontend. Two-factor flow possible for update-flow.


  • Bugfix: Safari-specific issue with SMS-counter.
  • Bugfix: Hidden required fields might break the settings-pages.
  • Updated translations for Danish.


  • Support for automatic synchronization of WordPress users => recipients (one-way) including all meta fields and groups.


  • Update WordPress Extension-page.


* Options page didn’t load initially after update.
* CSS/JS missing.
* A few notices squashed.


  • Bugfix: Final step of signup failed could fail if anonymous user.


  • Bugfix: Enqueuing of front-end scripts and CSS didn’t work for guests.


  • Editable custom fields for recipients: Settings page now features a custom fields editor for recipient forms with drag and drop re-ordering.
  • Short code generator: Possible to generate shortcodes from the backend for signup, update, unsubscribe and send SMS.
  • Tags-support for all custom fields.
  • Import subscribers, including custom fields, from spreadsheet. Support updating existing subscribers and keeps existing groups for existing subscribers.
  • Bugfix: SMS message in UI counting counted wrong for 153-160 characters long SMS and also counted some special chars wrong.
  • Bugfix: Manually added recipients %NAME%-tag didn’t work.


  • Cosmetical changes: A few inconsistencies has been fixed in the naming and the documentation.
  • Tidied up a bit: If the sending UI is not enabled, even less code is now executed on each request.


  • Inital version.