# So senden Sie SMS per Code: Python, PHP, Node.js, Java, Go und C# mit einem einzigen REST-Aufruf

> Das Senden eines SMS per Code erfolgt über einen authentifizierten HTTPS POST: ein Bearer-Token, ein JSON-Body mit Absenderkennung, Zielnummer, Nachricht und Nachrichtentyp sowie eine zurückgegebene Nachrichten-ID. Hier finden Sie dieselbe Anfrage in Python, PHP, Node.js, Java, Go und C#, ergänzt um Fehlerbehandlung und Tipps für den Produktivbetrieb.

- Kanonische URL: https://www.broadnet.me/de/blog/send-sms-api-python-php-nodejs-java-csharp
- Sprache: de
- Zuletzt aktualisiert: 2026-10-20
- Herausgeber: BroadNet (https://www.broadnet.me)

- Veröffentlicht: 2026-09-28
- Autor: BroadNet Editorial Team

Um einen SMS per Code zu senden, führen Sie einen HTTPS POST an https://api.broadnet.me/sms/sendSms mit einem Authorization: Bearer-Header und einem JSON-Body aus, der senderId, destinationNumber, die Nachricht und messageType enthält. Ein erfolgreicher Aufruf liefert HTTP 200 mit der Nachrichten-ID als Response-Body zurück; das Zustellergebnis trifft später als Zustellungsbericht (DLR) in Ihrem Webhook ein. Jede unten aufgeführte Sprache verwendet ausschließlich ihre Standard-HTTP-Bibliothek; die einzige offizielle SDK ist für TypeScript und Node.js vorgesehen.

## Wichtigste Erkenntnisse

- Endpunkt: POST https://api.broadnet.me/sms/sendSms, JSON Body, Bearer-Token.
- Pflichtfelder: senderId, destinationNumber (internationales Format ohne Pluszeichen), Nachricht, messageType (TEXT).
- Response: 200 mit der Nachrichten-ID; bewahren Sie diese auf, um sie mit den Zustellungsberichten abzugleichen.
- Fehler: Ein fehlendes oder ungültiges Token führt zu einem 401 vom Gateway; API-Fehler liefern Status, Error, Message, errorCode und requestUri zurück.
- Eine offizielle SDK: @broadnet/cpaas-sdk für TypeScript/Node.js; generieren Sie Clients für andere Sprachen aus der OpenAPI-Spezifikation.

## Was benötigen Sie vor dem Versand?

- Ein Zugriffstoken aus Ihrem BroadNet-Konto, das in einer Umgebungsvariablen (unten BROADNET_TOKEN) gespeichert wird, niemals im Quellcode oder in einer mobilen App.
- Eine Absenderkennung, die für das Zielland zugelassen ist; einige Länder erfordern vorab eine Registrierung.
- Eine Zielnummer im internationalen Format, zum Beispiel 447700900123 (eine fiktive britische Nummer).

Testzugänge erhalten Sie von unseren Ingenieuren: Fordern Sie diese an und Sie erhalten die Test-Zugangsdaten innerhalb eines Werktages; die erste Testnachricht wird in der Regel etwa fünf Minuten später versendet. Der [Quickstart](https://www.broadnet.me/developers/quickstart) führt Sie durch den Prozess.

## Wie sieht die Anfrage aus?

Hier ist die Anfrage mit cURL. Jedes untenstehende Beispiel sendet denselben JSON-Body.

```
curl -X POST https://api.broadnet.me/sms/sendSms \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "senderId": "BroadNet",
    "destinationNumber": "447700900123",
    "message": "Your verification code is 482913",
    "messageType": "TEXT"
  }'

# 200 OK → response body is the message ID, e.g. 2603121407537573731
```

## Wie sendet man eine SMS mit Python?

Mit der requests-Library setzt das json=-Argument den Content-Type-Header automatisch für Sie.

```
import os, requests

r = requests.post(
    "https://api.broadnet.me/sms/sendSms",
    headers={"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"},
    json={
        "senderId": "BroadNet",
        "destinationNumber": "447700900123",
        "message": "Your verification code is 482913",
        "messageType": "TEXT",
    },
)

print(r.status_code, r.text)  # message ID
```

## Wie sendet man eine SMS mit PHP?

Die curl-Erweiterung von PHP ist ausreichend; ein zusätzliches Paket ist nicht erforderlich.

```
<?php
$ch = curl_init("https://api.broadnet.me/sms/sendSms");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer " . getenv("BROADNET_TOKEN"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        "senderId"          => "BroadNet",
        "destinationNumber" => "447700900123",
        "message"           => "Your verification code is 482913",
        "messageType"       => "TEXT",
    ]),
]);

$messageId = curl_exec($ch);
echo $messageId;
```

## Wie sendet man eine SMS mit Node.js?

Node.js 18 und neuere Versionen haben fetch integriert:

```
// Node.js 18+ (fetch)
const res = await fetch("https://api.broadnet.me/sms/sendSms", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BROADNET_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    senderId: "BroadNet",
    destinationNumber: "447700900123",
    message: "Your verification code is 482913",
    messageType: "TEXT",
  }),
});

console.log(await res.text()); // message ID
```

Oder nutzen Sie das offizielle TypeScript/Node.js SDK, @broadnet/cpaas-sdk:

```
// npm install @broadnet/cpaas-sdk axios
import { Configuration, SMSSMSApi } from "@broadnet/cpaas-sdk";

const sms = new SMSSMSApi(
  new Configuration({
    basePath: "https://api.broadnet.me",
    accessToken: process.env.BROADNET_TOKEN!,
  }),
);

const res = await sms.smsSendsmsPost({
  sMSSmsRequest: {
    senderId: "BroadNet",
    destinationNumber: "447700900123",
    message: "Your verification code is 482913",
    messageType: "TEXT",
  },
});

console.log(res.data); // message ID
```

## Wie sendet man eine SMS mit Java?

Java 11 und neuere Versionen beinhalten java.net.http.HttpClient:

```
// Java 11+ — java.net.http is built in, nothing to install
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class SendSms {
    public static void main(String[] args) throws Exception {
        String json = "{"
            + "\"senderId\": \"BroadNet\", "
            + "\"destinationNumber\": \"447700900123\", "
            + "\"message\": \"Your verification code is 482913\", "
            + "\"messageType\": \"TEXT\""
            + "}";

        HttpRequest req = HttpRequest.newBuilder(URI.create("https://api.broadnet.me/sms/sendSms"))
            .header("Authorization", "Bearer " + System.getenv("BROADNET_TOKEN"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();

        HttpResponse<String> res = HttpClient.newHttpClient()
            .send(req, HttpResponse.BodyHandlers.ofString());

        System.out.println(res.statusCode() + " " + res.body()); // 200 + message ID
    }
}
```

## Wie sendet man eine SMS mit Go?

```
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	body := []byte(`{
		"senderId": "BroadNet",
		"destinationNumber": "447700900123",
		"message": "Your verification code is 482913",
		"messageType": "TEXT"
	}`)

	req, err := http.NewRequest(http.MethodPost, "https://api.broadnet.me/sms/sendSms", bytes.NewReader(body))
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("BROADNET_TOKEN"))
	req.Header.Set("Content-Type", "application/json")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	id, _ := io.ReadAll(res.Body)
	fmt.Println(res.StatusCode, string(id)) // 200 + message ID
}
```

## Wie sendet man eine SMS mit C# und .NET?

.NET 6 und neuere Versionen benötigen kein NuGet-Paket: HttpClient und System.Net.Http.Json sind integriert.

```
// .NET 6+ console app (Program.cs) — HttpClient is built in, no NuGet package
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Bearer", Environment.GetEnvironmentVariable("BROADNET_TOKEN"));

// PostAsJsonAsync sends Content-Type: application/json
var res = await http.PostAsJsonAsync("https://api.broadnet.me/sms/sendSms", new
{
    senderId = "BroadNet",
    destinationNumber = "447700900123",
    message = "Your verification code is 482913",
    messageType = "TEXT",
});

var id = await res.Content.ReadAsStringAsync();
Console.WriteLine($"{(int)res.StatusCode} {id}"); // 200 + message ID
```

## Was ist die Rückmeldung und wie werden Fehler behandelt?

| Antwort | Bedeutung | Vorgehensweise |
|---|---|---|
| 200 + Nachrichten-ID | Für die Zustellung akzeptiert | Speichern Sie die ID zusammen mit Ihrem eigenen Datensatz; warten Sie auf die DLR |
| 400 | Validierungsfehler oder fehlendes Feld | Anfrage korrigieren; keinen erneuten Versuch mit unveränderten Daten unternehmen |
| 401 | Fehlendes oder ungültiges Bearer-Token | Überprüfen Sie das Token und den Authorization-Header |
| 500 | Unerwarteter Serverfehler | Wiederholung mit Backoff versuchen; prüfen Sie den Nachrichtenstatus vor einem erneuten Senden |

Ein 200-Status bedeutet, dass die Plattform die Nachricht angenommen hat, nicht dass sie das Endgerät erreicht hat. Die Zustellung wird durch den Delivery Receipt gemeldet; lesen Sie [was ein DLR ist](https://www.broadnet.me/answers/what-is-dlr) und [SMS Delivery Receipts und Fehlercodes](https://www.broadnet.me/blog/sms-delivery-receipts-dlr-error-codes). Die API verfügt über keinen Idempotenz-Header; bewahren Sie daher die zurückgegebene Nachrichten-ID auf und prüfen Sie deren Status vor einem erneuten Senden, um Duplikate zu vermeiden. Die Seite [Fehlercodes](https://www.broadnet.me/developers/error-codes) listet die weiteren Fehler auf.

## Wie machen Sie die Lösung bereit für den Produktivbetrieb?

- Speichern Sie das Token serverseitig. Rufen Sie die SMS API niemals von einem Browser oder einer mobilen App aus auf, da das Token dort extrahiert werden könnte; nutzen Sie stattdessen Ihr eigenes Backend.
- Lange Nachrichten bewusst versenden: GSM-7 umfasst 160 Zeichen pro SMS, Unicode (UCS-2) 70 Zeichen, und längere Texte werden in kostenpflichtige Segmente aufgeteilt. Siehe [das SMS Zeichenlimit](https://www.broadnet.me/answers/sms-character-limit-explained).
- Stellen Sie Massenversand in eine Warteschlange und beachten Sie den Durchsatz Ihres Kontos; lesen Sie die [Rate Limits](https://www.broadnet.me/developers/rate-limits).
- Empfangen Sie Delivery Receipts über einen [Webhook](https://www.broadnet.me/developers/webhooks) und speichern Sie den finalen Status.
- Validieren Sie Nummern zuerst im internationalen Format; siehe [E.164 Telefonnummern-Validierung](https://www.broadnet.me/blog/e164-phone-number-validation-msisdn).

Bei sehr hohem Volumen oder einem bestehenden Telecom-Stack eignet sich SMPP unter Umständen besser als REST; siehe [SMPP vs. REST](https://www.broadnet.me/compare/sms-api-vs-smpp). Die Plattform von BroadNet verarbeitet 30.000 SMS pro Sekunde pro Knoten.

## Häufig gestellte Fragen

### Was ist der einfachste Weg, eine SMS per Code zu versenden?

Ein HTTPS POST an ein SMS API mit einem Access-Token und einem JSON Body. Bei BroadNet ist dies ein POST https://api.broadnet.me/sms/sendSms mit senderId, destinationNumber, der Nachricht und messageType.

### Gibt es einen BroadNet SDK für Python, PHP oder Java?

Nein. Es gibt einen offiziellen SDK, @broadnet/cpaas-sdk für TypeScript und Node.js. Andere Sprachen rufen die REST API direkt auf, wie hier gezeigt, oder generieren einen Client aus der OpenAPI-Spezifikation.

### In welchem Format sollte die Telefonnummer vorliegen?

Internationales Format mit Ländercode, ohne Pluszeichen oder Leerzeichen, zum Beispiel 447700900123.

### Bedeutet eine 200-Antwort, dass die SMS zugestellt wurde?

Nein. Es bedeutet, dass die Nachricht angenommen wurde. Der Zustellbericht (DLR) gibt an, ob sie das Endgerät erreicht hat.

### Kann ich SMS direkt von einer Android- oder iOS-App aus senden?

Nicht sicher. Legen Sie den API-Aufruf auf Ihren Server, damit der Access-Token niemals innerhalb der App übertragen wird, und lassen Sie die App Ihren Server aufrufen.

### Wo finde ich die vollständige API-Referenz?

In der [API-Referenz](https://www.broadnet.me/developers/api-reference) und im [OpenAPI-Spezifikationsdokument](https://www.broadnet.me/developers/openapi).

Code-Beispiele sind diejenigen auf unseren Entwicklerseiten, die gegen die veröffentlichte OpenAPI-Spezifikation geprüft wurden. Überprüft am 28. September 2026. Siehe unsere [redaktionellen Standards](https://www.broadnet.me/about/editorial-standards).
