Global Communication Platform - Supercharged with a Powerful SMS Gateway

GatewayAPI accelerates development by removing the learning curve and guesswork, so you can get down to building right away with our APIs.

Sign up Talk to an expert

Strong enterprise partner for global messaging

Our high scalability and level of compliance ensures that we are with you all the way, no matter the amount of messages you send or countries you operate in.

EU setup

We offer an EU setup where hosting and ownership are held within the EU, which is a popular solution for those who have special requirements concerning their data.

Thousands of integration options

Integrate with your favorite tools. Our sophisticated integration options allow you to implement GatewayAPI’s services, including our powerful SMS gateway, in the tools you like to use, so you can have your first proof of concept up and running in no time.
Play video video play button
3 min. video

Break through the clutter

Getting the attention of your audience doesn’t have to be complicated. Find out how our services can help you break through the clutter and engage with your audience fast and efficiently. We are an award-winning platform with thousands of satisfied customers globally.

How to Send Your First SMS With GatewayAPI and cURL

How to Send Your First SMS With GatewayAPI and cURL

Read our guide on how to send SMS messages using GatewayAPI and the cURL coding language.

Read more
Pricing

View SMS prices for over 200 countries

Country
Standard
As low as
Denmark flagDenmark(+45)
0.0401EUR
0.0327EUR
Sweden flagSweden(+46)
0.0376EUR
0.027EUR
Norway flagNorway(+47)
0.0462EUR
0.0342EUR
Germany flagGermany(+49)
0.0642EUR
0.0597EUR
Rock-solid APIs

All the services and benefits you need

Intuitive

Set up your GatewayAPI account and start sending messages right away. Get access to intuitive and easy to use dashboards and services. In case you need help, our support team is only one click away.

Rock-solid uptime

Feel confident that you can always reach your recipients with our providers around the world. Get access to a distinct level of dependability and technical redundancy that guarantees rapid delivery of messages in real-time. Our historical uptime of over 99.99% speaks for itself.

Complete GDPR compliance

With GatewayAPI as your messaging partner, you’ll have a fully GDPR-compliant service, including European data storage and ISAE 3000 certification (comparable to a SOC-2 report). Furthermore, we offer a unique EU setup, trusted by reputable organizations such as the Danish Ministry of Justice.

We offer crystal-clear transparency

You can keep track of the uptime of our SMS APIs live and historically here. Our rates for 200+ countries as well as our ISAE 3000 GDPR report are freely accessible. Additionally, you can accurately follow up on the delivery to each recipient in the dashboard.

Pick freely from the toolbox

Reach new heights with our many add-on services. Supplement with our Email API or Number Lookup API or with virtual numbers and keywords. Setting up automation is a breeze with the many available integration options.

Unwavering service and commitment

Our Support Team is ready to help you. Our average response time is less than 20 seconds within working hours and our satisfaction rate is a solid 98%. Additionally, there are no minimum spending requirements for receiving support.

Parlez-vous C#?

Connect to GatewayAPI with your preferred coding language

c#
curl
go
httpie
java
node.js
php
python
ruby
using System.Net.Http.Json;
using System.Net.Http.Headers;

using HttpClient client = new HttpClient();

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Token",
    "GoGenerateAnApiToken"
);

var messages = new {
    sender = "ExampleSMS",
    message = "Hello World!",
    recipients = new[] { new { msisdn = 45_1234_5678 }},
};

using var resp = await client.PostAsync(
    "https://gatewayapi.com/rest/mtsms",
    JsonContent.Create(messages)
);

// On 2xx, print the SMS IDs received back from the API
// otherwise print the response content to see the error:
if (resp.IsSuccessStatusCode && resp.Content != null) {
    Console.WriteLine("success!");
    var content = await resp.Content.ReadFromJsonAsync<Dictionary<string, dynamic>>();
    foreach (var smsId in content["ids"].EnumerateArray()) {
        Console.WriteLine("allocated SMS id: {0:G}", smsId);
    }
} else if (resp.Content != null) {
    Console.WriteLine("failed :(\nresponse content:");
    var content = await resp.Content.ReadAsStringAsync();
    Console.WriteLine(content);
}
12345678910111213141516171819202122232425262728293031323334
curl -v "https://gatewayapi.com/rest/mtsms" \
  -u "GoGenerateAnApiToken": \
  -d sender="ExampleSMS" \
  -d message="Hello World" \
  -d recipients.0.msisdn=4512345678
12345
package main

import (
  "bytes"
  "encoding/json"
  "io/ioutil"
  "log"

  "github.com/mrjones/oauth"
)

func main() {
  // Authentication
  key := "Create-an-API-Key"
  secret := "GoGenerateAnApiKeyAndSecret"
  consumer := oauth.NewConsumer(key, secret, oauth.ServiceProvider{})
  client, err := consumer.MakeHttpClient(&oauth.AccessToken{})
  if err != nil {
    log.Fatal(err)
  }

  // Request
  type GatewayAPIRecipient struct {
    Msisdn uint64 `json:"msisdn"`
  }
  type GatewayAPIRequest struct {
    Sender     string                `json:"sender"`
    Message    string                `json:"message"`
    Recipients []GatewayAPIRecipient `json:"recipients"`
  }
  request := &GatewayAPIRequest{
    Sender:  "ExampleSMS",
    Message: "Hello World",
    Recipients: []GatewayAPIRecipient{
      {
        Msisdn: 4512345678,
      },
    },
  }

  // Send it
  var buf bytes.Buffer
  if err := json.NewEncoder(&buf).Encode(request); err != nil {
    log.Fatal(err)
  }
  res, err := client.Post(
    "https://gatewayapi.com/rest/mtsms",
    "application/json",
    &buf,
  )
  if err != nil {
    log.Fatal(err)
  }
  if res.StatusCode != 200 {
    body, _ := ioutil.ReadAll(res.Body)
    log.Fatalf("http error reply, status: %q, body: %q", res.Status, body)
  }

  // Parse the response
  type GatewayAPIResponse struct {
    Ids []uint64
  }
  response := &GatewayAPIResponse{}
  if err := json.NewDecoder(res.Body).Decode(response); err != nil {
    log.Fatal(err)
  }
  log.Println("ids", response.Ids)
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
package main

import (
  "net/http"
  "net/url"
)

func main() {
  http.PostForm(
    "https://gatewayapi.com/rest/mtsms",
    url.Values{
      "token":   {"GoGenerateAnApiToken"},
      "sender":  {"ExampleSMS"},
      "message": {"Hello World"},
      "recipients.0.msisdn": {"4512345678"},
    },
  )
}
123456789101112131415161718
# install httpie oauth lib, with pip install httpie-oauth
http --auth-type=oauth1\
 --auth="Create-an-API-Key:GoGenerateAnApiKeyAndSecret"\
 "https://gatewayapi.com/rest/mtsms"\
 sender='ExampleSMS'\
 message='Hello world'\
 recipients:='[{"msisdn": 4512345678}]'
1234567
http --auth=GoGenerateAnApiToken: \
 https://gatewayapi.com/rest/mtsms\
 sender='ExampleSMS'\
 message='Hello world'\
 recipients:='[{"msisdn": 4512345678}]'
12345
// Install deps with gradle
//   compile 'com.squareup.okhttp3:okhttp:3.4.1'
//   compile 'se.akerfeldt:okhttp-signpost:1.1.0'
//   compile 'org.json:json:20160810'
final String key = "Create-an-API-Key";
final String secret = "GoGenerateAnApiKeyAndSecret";

OkHttpOAuthConsumer consumer = new OkHttpOAuthConsumer(key, secret);
OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(new SigningInterceptor(consumer))
        .build();
JSONObject json = new JSONObject();
json.put("sender", "ExampleSMS");
json.put("message", "Hello World");
json.put("recipients", (new JSONArray()).put(
        (new JSONObject()).put("msisdn", 4512345678L)
));

RequestBody body = RequestBody.create(
        MediaType.parse("application/json; charset=utf-8"), json.toString());
Request signedRequest = (Request) consumer.sign(
        new Request.Builder()
                .url("https://gatewayapi.com/rest/mtsms")
                .post(body)
                .build()).unwrap();

try (Response response = client.newCall(signedRequest).execute()) {
    System.out.println(response.body().string());
}
1234567891011121314151617181920212223242526272829
import java.io.DataOutputStream;
import java.net.URL;
import java.net.URLEncoder;
import javax.net.ssl.HttpsURLConnection;

public class HelloWorld {
  public static void main(String[] args) throws Exception {
    URL url = new URL("https://gatewayapi.com/rest/mtsms");
    HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
    con.setDoOutput(true);

    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(
      "token=GoGenerateAnApiToken"
      + "&sender=" + URLEncoder.encode("ExampleSMS", "UTF-8")
      + "&message=" + URLEncoder.encode("Hello World", "UTF-8")
      + "&recipients.0.msisdn=4512345678"
    );
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("Got response " + responseCode);
  }
}
123456789101112131415161718192021222324
async function sendSMS() {
  const token = "GoGenerateAnApiToken";
  const payload = {
    sender: "ExampleSMS",
    message: "Hello World",
    recipients: [
      { msisdn: 45_1234_5678 },
    ],
  };

  const resp = await fetch(
    "https://gatewayapi.com/rest/mtsms",
    {
      method: "POST",
      body: JSON.stringify(payload),
      headers: {
        "Content-Type": "application/json",
        "Authorization": `Token ${token}`,
      },
    },
  );

  console.log(await resp.json());
}

sendSMS();
1234567891011121314151617181920212223242526
<?php
//Send an SMS using Gatewayapi.com
$url = "https://gatewayapi.com/rest/mtsms";
$api_token = "GoGenerateAnApiToken";

//Set SMS recipients and content
$recipients = [4512345678, 4587654321];
$json = [
    'sender' => 'ExampleSMS',
    'message' => 'Hello world',
    'recipients' => [],
];
foreach ($recipients as $msisdn) {
    $json['recipients'][] = ['msisdn' => $msisdn];
}

//Make and execute the http request
//Using the built-in 'curl' library
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch,CURLOPT_USERPWD, $api_token.":");
curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($json));
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
print($result);
$json = json_decode($result);
print_r($json->ids);
1234567891011121314151617181920212223242526272829
# Install deps with: pip install requests
import requests

def send_sms(sender: str, msg_content: str, recipients: list[int]):
    token="GoGenerateAnApiToken"

    payload = {
        "sender": sender,
        "message": msg_content,
        "recipients": [
            {"msisdn": recipient_number}
            for recipient_number in recipients
        ],
    }

    resp = requests.post(
        "https://gatewayapi.com/rest/mtsms",
        json=payload,
        auth=(token, ""),
    )
    resp.raise_for_status()
    print(resp.json())

send_sms("ExampleSMS", "Hello World", [45_1234_5678])
123456789101112131415161718192021222324
require 'uri'
require 'net/http'
require 'json'

body = {
  'recipients': [{'msisdn': 45_1234_5678}],
  'message': 'Hello World',
  'sender': 'ExampleSMS',
}

token = 'GoGenerateAnApiToken'

resp = Net::HTTP.post(
  URI.parse('https://gatewayapi.com/rest/mtsms'),
  JSON.generate(body),
  {
    'Content-Type': 'application/json',
    'Authorization': "Token #{token}",
  },
)

puts resp.body
12345678910111213141516171819202122

WordPress WordPress

Free plugin for sending SMS messages and setting up 2-factor login.

Read more Set up plugin

Zapier Zapier

Integrate with over 5,000 apps via Zapier and get started automating SMS workflows.

Read more Go to Zapier

SMPP SMPP

Hook up to GatewayAPI with a direct SMPP-connection and send huge volumes of text messages seamlessly.

Read more Contact us

Make Make

Setting up SMS automation is a breeze with Make.

Read more Go to Make