Master sms Master sms API
Schlüssel verwalten
Offizielle API-Dokumentation

Master sms API

Integrieren Sie virtuelle Nummern und SMS-Empfang mit einer sicheren und vorhersehbaren API.

Version 4.2.0 REST · JSON · HTTPS Sprache: Deutsch

Übersicht

Basis-URL

Alle folgenden Routen verwenden diese Basis-URL und liefern UTF-8-JSON.

https://master-sms.shop/api/v1

Schnellstart

Erstellen Sie einen Schlüssel, speichern Sie das Secret nur serverseitig und führen Sie die erste Guthabenabfrage aus.

Schlüssel verwalten
Verwenden Sie das API Secret nur im Backend. Zugangsdaten gehören niemals in Browser, verteilte Apps oder öffentliche Repositories.

Authentifizierung

Senden Sie beide Zugangsdaten bei jeder geschützten Route.

Headers

Accept: application/json
Content-Type: application/json
X-API-Key: your_api_key
X-API-Secret: your_api_secret

Antwortformat

Erfolge liefern success=true und data. Fehler liefern success=false, error und den passenden HTTP-Status.

{
    "success": true,
    "data": {
        "example": "value"
    },
    "timestamp": 1785078000
}
{
    "success": false,
    "error": "Fehlerbeschreibung",
    "code": 400
}

Endpoint-Referenz

Die dokumentierten Routen entsprechen dem öffentlichen Front Controller der API v1.

GET /health Öffentliche Route

API-Status

Bestätigt die Betriebsbereitschaft und liefert die Version.

Beispielantwort

{
    "success": true,
    "data": {
        "version": "4.2.0",
        "status": "operational",
        "timestamp": 1785078000,
        "server_time": "2026-07-26 12:00:00",
        "request_id": "req_01K123EXAMPLE"
    },
    "timestamp": 1785078000
}
GET /balance Authentifizierung erforderlich

Guthaben abrufen

Liefert Gesamt-, gesperrtes und verfügbares Guthaben sowie die Währung.

Beispielantwort

{
    "success": true,
    "data": {
        "balance": 1250.5,
        "blocked": 50,
        "available": 1200.5,
        "currency": "BRL",
        "limit": 0
    },
    "timestamp": 1785078000
}
GET /services Authentifizierung erforderlich

Dienste auflisten

Listet Länder, Dienste, Betreiber, Anbieter, berechnete Preise und Bestand.

Optionale Filter

ParameterTypBeschreibungBeispiel
countrystringNumerischer Ländercode.73
servicestringDienstcode, zum Beispiel wa.wa
operatorstringBestimmter Betreiber oder eine vom Anbieter unterstützte Liste.claro
availablebooleanBei true werden nur verfügbare Einträge geliefert.true
providerstringName oder Kennung des Anbieters.Hero SMS
searchstringTextsuche nach Dienst.WhatsApp

Beispielanfrage

GET https://master-sms.shop/api/v1/services?country=73&available=true

Beispielantwort

{
    "success": true,
    "data": [
        {
            "country_id": "73",
            "country_name": "Brasil",
            "services": [
                {
                    "code": "wa",
                    "name": "WhatsApp",
                    "operator": "claro",
                    "price": 2.5,
                    "stock": 150,
                    "provider": "Hero SMS",
                    "category": "messenger",
                    "markup": 10
                }
            ]
        }
    ],
    "timestamp": 1785078000
}
POST /buy Authentifizierung erforderlich

Nummer kaufen

Kauft eine virtuelle Nummer und erstellt eine SMS-Aktivierung.

JSON-Body

FeldTypErforderlichBeschreibung
servicestringJaDienstcode, zum Beispiel wa.
countrystringJaNumerischer Ländercode.
request_idstringJaEindeutige Kaufversuchs-ID zur Vermeidung von Duplikaten.
operatorstringNeinBestimmter Betreiber oder eine vom Anbieter unterstützte Liste.
providerstringNeinName oder Kennung des Anbieters.
max_pricenumberNeinMaximal akzeptierter Preis in der von der API gelieferten Währung.
request_id: Erzeugen Sie pro Kaufabsicht eine neue request_id und verwenden Sie denselben Wert nur für die Wiederholung derselben Absicht nach einem Netzwerkfehler.
max_price: Der Kauf scheitert vor der Belastung, wenn der berechnete Preis max_price überschreitet.

Beispielanfrage

{
    "service": "wa",
    "country": "73",
    "operator": "claro",
    "provider": "Hero SMS",
    "max_price": 5,
    "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Beispielantwort

{
    "success": true,
    "data": {
        "activation_id": "ACT17850780001234",
        "phone": "5511999999999",
        "operator": "claro",
        "price": 2.5,
        "currency": "BRL",
        "request_id": "550e8400-e29b-41d4-a716-446655440000",
        "service_name": "WhatsApp"
    },
    "timestamp": 1785078000
}
GET /status?activation_id={id} Authentifizierung erforderlich

Aktivierung abrufen

Aktualisiert und liefert Status, Nummer und SMS-Code.

ParameterErforderlichBeschreibung
activation_idJaBeim Kauf gelieferte ID.

Mögliche Status

StatusBeschreibung
pendingWartet auf SMS.
receivedSMS empfangen; code enthält den Code.
canceledAktivierung storniert.
expiredAktivierung abgelaufen.

Beispielantwort

{
    "success": true,
    "data": {
        "activation_id": "ACT17850780001234",
        "status": "received",
        "phone": "5511999999999",
        "created_at": 1785078000,
        "code": "123456",
        "received_at": 1785078060
    },
    "timestamp": 1785078060
}
POST /cancel Authentifizierung erforderlich

Aktivierung stornieren

Storniert eine berechtigte Aktivierung und meldet die Erstattung.

Storno hängt von Mindestzeit, Status und Anbieterregeln ab. Aktivierungen mit bereits empfangener SMS sind nicht stornierbar.

JSON-Body

{ "activation_id": "ACT17850780001234" }

Beispielantwort

{
    "success": true,
    "data": {
        "activation_id": "ACT17850780001234",
        "status": "canceled",
        "refunded": true,
        "refund_amount": 2.5
    },
    "timestamp": 1785078300
}
POST GET DELETE /webhook Authentifizierung erforderlich

Webhooks

Registriert, listet und entfernt Ziele für asynchrone Ereignisse.

Verfügbare Ereignisse

EreignisBeschreibung
sms.receivedSMS empfangen.
sms.purchasedNummer gekauft.
sms.statusAktivierungsstatus geändert.
balance.lowGuthaben unter dem konfigurierten Grenzwert.

POST /webhook · JSON-Body

FeldErforderlichBeschreibung
eventJaName des signierten Ereignisses.
urlJaÖffentliche HTTPS-URL für JSON-POSTs.
secretNeinSecret zur Erzeugung der HMAC-SHA-256-Signatur.
{
    "event": "sms.received",
    "url": "https://example.com/webhooks/master-sms",
    "secret": "replace_with_a_random_secret"
}

GET /webhook

Die Liste liefert das gespeicherte Secret niemals zurück.

DELETE /webhook · JSON-Body

{ "webhook_id": 1 }

Webhook-Payload

{
    "event": "sms.received",
    "timestamp": 1785078060,
    "data": {
        "activation_id": "ACT17850780001234",
        "code": "123456",
        "phone": "5511999999999",
        "service": "wa",
        "received_at": 1785078060
    },
    "signature": "legacy_body_signature"
}
GET /stats Authentifizierung erforderlich

Statistiken

Liefert Summen für Käufe, empfangene SMS, Stornos, Ausgaben und Erstattungen.

{
    "success": true,
    "data": {
        "total_compras": 42,
        "total_recebidos": 31,
        "total_cancelados": 11,
        "total_gasto": 79.5,
        "total_estornado": 21
    },
    "timestamp": 1785078000
}
GET /commissions Authentifizierung erforderlich

Provisionen

Liefert offene und bezahlte Provisionen sowie den Verlauf des angemeldeten Resellers.

{
    "success": true,
    "data": {
        "pending_total": 15.3,
        "paid_total": 120,
        "commissions": []
    },
    "timestamp": 1785078000
}

Webhook-Sicherheit

Der Roh-Body wird mit HMAC SHA-256 signiert. Vergleichen Sie X-Webhook-Signature in konstanter Zeit, bevor Sie JSON verarbeiten.

Antworten Sie schnell mit HTTP 2xx. Fehlgeschlagene Zustellungen werden mit steigenden Pausen wiederholt.
$rawBody = file_get_contents('php://input');
$received = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $rawBody, getenv('MASTER_SMS_WEBHOOK_SECRET'));

if ($received === '' || !hash_equals($expected, $received)) {
    http_response_code(401);
    exit;
}

$event = json_decode($rawBody, true, flags: JSON_THROW_ON_ERROR);
http_response_code(204);

Integrationsbeispiele

Minimale Backend-Clients. Passen Sie Timeouts, Logs und Secret-Speicherung an.

<?php
final class MasterSmsClient
{
    public function __construct(
        private string $apiKey,
        private string $apiSecret,
        private string $baseUrl = 'https://master-sms.shop/api/v1'
    ) {}

    public function request(string $method, string $path, ?array $body = null): array
    {
        $ch = curl_init(rtrim($this->baseUrl, '/') . $path);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => $method,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTPHEADER => [
                'Accept: application/json',
                'Content-Type: application/json',
                'X-API-Key: ' . $this->apiKey,
                'X-API-Secret: ' . $this->apiSecret,
            ],
            CURLOPT_POSTFIELDS => $body === null ? null : json_encode($body),
        ]);
        $raw = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($raw === false) {
            throw new RuntimeException(curl_error($ch));
        }
        curl_close($ch);
        $result = json_decode($raw, true, flags: JSON_THROW_ON_ERROR);
        if ($status < 200 || $status >= 300 || empty($result['success'])) {
            throw new RuntimeException($result['error'] ?? "HTTP {$status}", $status);
        }
        return $result['data'] ?? [];
    }
}

$client = new MasterSmsClient(
    getenv('MASTER_SMS_API_KEY'),
    getenv('MASTER_SMS_API_SECRET')
);
$balance = $client->request('GET', '/balance');
$services = $client->request('GET', '/services?country=73&available=true');
$purchase = $client->request('POST', '/buy', [
    'service' => 'wa',
    'country' => '73',
    'request_id' => bin2hex(random_bytes(16)),
]);

KI-Integrationsprompt

Kopieren Sie diesen Prompt, geben Sie Ihren Stack an und senden Sie ihn an eine Programmier-KI. Fügen Sie niemals Ihr API Secret ein.

Fehler und Behandlung

CodeBedeutungEmpfohlene Behandlung
400Ungültige AnfrageKorrigieren Sie JSON, Pflichtfelder oder Regeln.
401Nicht authentifiziertPrüfen Sie X-API-Key und X-API-Secret.
402Guthaben unzureichendLaden Sie das Konto vor dem Kauf auf.
403Zugriff verweigertAktivieren Sie die Berechtigung oder prüfen Sie die IP-Liste.
404Nicht gefundenPrüfen Sie Route, Dienst, Bestand oder activation_id.
405Ungültige MethodeVerwenden Sie die dokumentierte HTTP-Methode.
409IdempotenzkonfliktNutzen Sie request_id nicht für einen anderen Kauf.
429Limit überschrittenWarten Sie und versuchen Sie es mit Backoff erneut.
500Interner FehlerBewahren Sie request_id und vermeiden Sie einen doppelten Kauf.

Rate Limit

Das Minutenlimit hängt vom Schlüssel ab und steht in X-RateLimit-Limit. Verwenden Sie bei HTTP 429 exponentielles Backoff mit Jitter.

Sicherheitscheckliste

  1. Speichern Sie API Key und Secret in Umgebungsvariablen oder einem Secret Vault.
  2. Rufen Sie die API nur aus dem Backend auf; Apps und Browser verwenden Ihren Server.
  3. Verwenden Sie HTTPS, Timeouts, Logs ohne Zugangsdaten und strikte JSON-Prüfung.
  4. Verwenden Sie eine idempotente request_id und ändern Sie sie nach einem Timeout nicht.
  5. Prüfen Sie die Webhook-Signatur über den Roh-Body vor jeder Zustandsänderung.