Eine API für SMS und andere Kommunikationskanäle von BerlinSMS

SMS API für Entwickler – REST API, 2FA, OTP und Captcha

Ob Anbindung einzelner Systeme oder Aufbau einer skalierbaren Infrastruktur für Ihr Messaging: Nutzen Sie die API von BerlinSMS für eine optimale Kommunikation von Ihrer Anwendung aus. Unsere schlanke, gut dokumentierte und einfach zu integrierende REST-Schnittstelle eignet sich sowohl für den SMS-Versand als auch für die Integration von Captchas und der Zwei-Faktor-Authentifizierung (2FA). Mit Server-Standorten in Deutschland und Finnland steht Ihnen unsere REST API zuverlässig und konform zur DSGVO zur Verfügung. Unsere Code-Beispiele und API-Referenzen für PHP, Python, Node.js und Java helfen Ihnen beim schnellen Einstieg.

Integrieren Sie SMS-Versand, Zwei-Faktor-Authentifizierung und Captcha in wenigen Minuten in Ihre Anwendungsumgebung: mit Hilfe der DSGVO-konformen REST API, inklusive Dokumentation, Code-Beispielen und SDKs für PHP, Python, Node.js und weiteren Sprachen.

DSGVO und Datenschutz bei der Verwendung unserer API

Die Verarbeitung aller API-Anfragen, Nachrichten und Protokolldaten erfolgt ausschließlich auf Servern in Deutschland. Es findet weder ein Datentransfer über Drittländer statt noch greifen wir auf Cloudanbieter in den USA zurück. Zudem ist BerlinSMS ein deutsches Unternehmen mit Sitz in Berlin. Auf Anfrage stellen wir Ihnen gerne Auftragsverarbeitungsverträge (AVV) zur Verfügung.

Tipp für Entwickler: Bei der Integration der API für 2FA erhalten Sie automatisch ein AVV-fähiges Setup. Eine manuelle Einstellung von Datenschutzoptionen entfällt damit.

SMS VERSAND MIT BERLINSMS

SMS VERSAND
/ SMS API

SMS-Versand per REST API. Einzelnachrichten, Bulk-Versand, alphanumerische Absender-IDs und Delivery-Report-Callback per Webhook.

So schnell geht die Integration unserer Rest SMS API

Hier finden Sie Code-Beispiele für verschiedene Sprachen: Wählen Sie das passende Script für Ihre Anwendung. Alle Beispiele verwenden denselben REST-Endpoint und dieselbe Header-Authentifizierung.

curl

Query the delivery status of a sent SMS using a simple HTTP GET request. Replace [apiKey] with your personal API key and [transactionId] with the ID returned by the send endpoint. On success, the API returns HTTP 200 with the current delivery status in the response body.

curl -X 'POST' \
  'https://api.berlinsms.de/send/sms/4917012345/Hallo%20world' \
  -H 'apiKey: [apiKey]'

OpenAPI

This OpenAPI snippet documents the /nrq/{transactionId} endpoint. Import it into Swagger UI, Postman, or Insomnia for interactive testing. Authentication is handled via the apiKey header — generate your key in the BerlinSMS dashboard before making your first request.

paths:
  /send/sms/{phonenumber}/{text}:
    post:
      tags:
        - send
      summary: send one single message to a number
      operationId: sendSingleSMS
      security:
        - apikeyAuth: [apiKey]
      parameters:
        - name: phonenumber
          in: path
          description: destination telephon number
          schema:
            type: number
          required: true
        - name: text
          in: path
          description: text to send
          schema:
            type: string
          example: Hallo World
          required: true
      responses:
        '200':
          description: successful operation
          content: {}
components:
  securitySchemes:
    apikeyAuth:
      type: apiKey
      in: header
      name: apiKey
servers:
  - url: 'https://api.berlinsms.de'

PHP

Send a GET request using PHP’s built-in file_get_contents() with a custom stream context. Pass your API key via the HTTP header and append the transactionId to the endpoint URL. The response is returned as a string — decode it with json_decode() to access the status fields. No external libraries required.

<?php
$context = stream_context_create(array(
  'http'=>array(
    'method'=>"POST",
    'header'=>"apiKey: $apiKey"
  )
);
$url = 'https://api.berlinsms.de/send/sms/'.$phonenumber.'/'.rawurlencode($message);
$file = file_get_contents( $url, false, $context );
?>

C#

Use HttpClient to query the notification endpoint. Add your API key as a default request header so it is sent automatically with every request. The GetAsync() call is non-blocking — await the result in an async method or use .Result for synchronous contexts. Parse the response content with System.Text.Json or Newtonsoft.Json.using System.Web;

using System.Web;

HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add( "apiKey", apiKey );
string url = "https://api.berlinsms.de/send/sms/"+ phonenumber +"/" + Uri.EscapeDataString(message);
httpClient.PostAsync(url, null);

Javascript

Use the Fetch API to query delivery status from your Node.js backend or browser application. Pass the apiKey in the request headers and concatenate the transactionId to the endpoint URL. Chain .then() to process the JSON response, or use async/await for cleaner syntax in modern environments.

const options = { method: 'POST', headers: { apiKey: apiKey } };
const url = 'https://api.berlinsms.de/send/sms/' + phonenumber + '/' + encodeURIComponent(message);

fetch(url,options)
    .then(console.log);

Perl

Use LWP::UserAgent to send a GET request with the apiKey passed as a custom header field. The transactionId is appended directly to the endpoint URL. Access the response body via $response->decoded_content() and parse it with a JSON module such as JSON::XS.

use LWP::UserAgent;
use URI::Encode qw(uri_encode);

my $url = 'https://api.berlinsms.de/send/sms/' . $phonenumber + '/' . uri_encode($message);
my $ua = LWP::UserAgent->new();
my $response = $ua->post(
	$url, 
	apiKey=>$apiKey
);

Python

Use the requests library to query the notification endpoint. Pass the apiKey in the headers dictionary and append the transactionId to the base URL. Access the delivery status with response.json(). For production use, add a timeout parameter and handle HTTPError exceptions.

import requests
import urllib.parse 

headers = {'apiKey': apiKey} 
url = "https://api.berlinsms.de/send/sms/"+ str(phonenumber) +"/" + urllib.parse.quote(message); 

requests.post(url, headers=headers)

Häufige Fragen & Antworten

Hier finden Sie Antworten auf die wichtigsten Fragen.

Wie erhalte ich einen API-Key?

Nach der kostenlosen Registrierung auf berlinsms.de können Sie im Dashboard unter „Für Entwickler“ sofort einen API-Key generieren. Der Prozess dauert unter zwei Minuten – keine manuelle Freischaltung, kein Wartezeitraum. Mit dem Key können Sie direkt die REST API ansprechen oder eines unserer Code-Beispiele für PHP, Python oder Node.js verwenden.

Welche Programmiersprachen werden unterstützt?

Die BerlinSMS API ist eine standardkonforme REST API mit JSON – sie funktioniert mit jeder Sprache, die HTTP-Requests stellen kann. Offizielle Code-Beispiele und Tutorials gibt es für PHP, Python, Node.js, Java und cURL. Da die API vollständig dokumentiert ist, lässt sie sich auch in Ruby, Go, C#, Kotlin und anderen Sprachen problemlos integrieren.

Was ist der Unterschied zwischen SMS-API, 2FA API und Captcha API?

Alle drei Produkte nutzen dieselbe REST-Infrastruktur und denselben API-Key. Die SMS API ist für den allgemeinen Nachrichtenversand (Kampagnen, Benachrichtigungen, Transaktions-SMS). Die 2FA API ist speziell für Einmalspasswörter (OTP) bei der Benutzeranmeldung optimiert – mit kürzeren Zustellzeiten und Opt-in-Flows. Die Captcha API ersetzt Google reCAPTCHA durch eine DSGVO-konforme Alternative ohne Drittanbieter-Tracking.

Wie schnell werden OTP-Nachrichten über die 2FA API zugestellt?

Die durchschnittliche Zustellzeit für OTP-Nachrichten über die BerlinSMS 2FA API liegt unter 2 Sekunden. Unsere Server befinden sich in Berlin und Frankfurt am Main – mit redundanten Verbindungen zu den deutschen Mobilfunknetzen. Bei zeitkritischen Anwendungsfällen wie Login-Verifikation oder Zahlungsbestätigung ist das ein entscheidender Faktor.

Ist die BerlinSMS API DSGVO-konform?

Ja, vollständig. Alle Daten – inklusive Telefonnummern, Nachrichteninhalte und API-Logs – werden ausschließlich auf Servern in Deutschland verarbeitet. Es gibt keinen Transfer in Drittländer, keine Einbindung von US-Cloud-Diensten. Für Ihre Datenschutzdokumentation stellen wir auf Anfrage einen Auftragsverarbeitungsvertrag (AVV) nach Art. 28 DSGVO aus.

Gibt es eine Sandbox oder Testumgebung?

Ja. Nach der Registrierung erhalten Sie Testkredits, mit denen Sie die API ohne Kosten ausprobieren können. So können Sie Ihre Integration vollständig testen, bevor Sie in den Live-Betrieb gehen. Die API-Endpunkte für Test und Produktion sind identisch aufgebaut – kein Umkonfigurieren beim Go-Live.

Kann ich Delivery Reports per Webhook empfangen?

Ja. Sie können bei der API-Anfrage eine Callback-URL angeben. Sobald eine SMS zugestellt oder abgelehnt wurde, sendet BerlinSMS einen HTTP-POST mit dem Zustellstatus, Zeitstempel und Nachrichtendetails an Ihre URL. Das ermöglicht vollständige Echtzeit-Transparenz ohne Polling. Details finden Sie in der SMS REST API Referenz.