Bearer-Schlüssel
Senden Sie Authorization: Bearer smp_live_… oder X-Api-Key. Der vollständige Schlüssel wird einmal angezeigt, gespeichert wird nur sein Hash. Bis zu 20 aktive Schlüssel pro Konto, optionales Ablaufdatum und Rotation mit einem Klick.
So funktioniert eine Integration
Die API spiegelt, was das Dashboard tut, in derselben Reihenfolge. Nichts wird berechnet, bevor Sie eine Bestellung erstellen, und jeder Schreibvorgang ist idempotent.
Wählen Sie im Dashboard die Berechtigungen, die der Schlüssel braucht, und optional die IPs, die ihn verwenden dürfen. Der vollständige Schlüssel wird einmal angezeigt.
GET /v1/catalog/services liefert jeden veröffentlichten Dienst mit dem Preis bereits in der Kontowährung und Ihrer Stufe.
POST /v1/orders/preview prüft Link und Menge und liefert den genauen Betrag, ohne etwas anzulegen.
POST /v1/orders mit einem Idempotency-Key. Das Guthaben wird belastet und die Bestellung an den Anbieter mit der besten gemessenen Qualität geroutet.
Registrieren Sie einen https-Endpunkt und empfangen Sie signierte Ereignisse für Statusänderungen, Teillieferungen, Abschluss, Erstattungen und Nachfüllungen.
curl -X POST https://YOUR-DOMAIN/v1/orders \
-H "Authorization: Bearer smp_live_xxxxxxxxxx_..." \
-H "Idempotency-Key: 2b7c1d9e-order-1001" \
-H "Content-Type: application/json" \
-d '{"service":"<service_id>","link":"https://instagram.com/p/abc","quantity":1000}'Ersetzen Sie YOUR-DOMAIN durch den Host dieses Shops, den Schlüssel durch Ihren eigenen und <service_id> durch eine ID aus dem Katalog.
Authentifizierung und Limits
Ein Schlüssel ist eine serverseitige Zugangsdaten. Er gelangt nie in einen Browser, trägt nur die Berechtigungen, die Sie gewähren, und Sie können ihn jederzeit widerrufen oder rotieren, ohne Ihre anderen Schlüssel zu berühren.
Senden Sie Authorization: Bearer smp_live_… oder X-Api-Key. Der vollständige Schlüssel wird einmal angezeigt, gespeichert wird nur sein Hash. Bis zu 20 aktive Schlüssel pro Konto, optionales Ablaufdatum und Rotation mit einem Klick.
Sie können einen Schlüssel optional auf bis zu 20 IP-Adressen beschränken. Anfragen von anderen Adressen werden mit 403 FORBIDDEN abgelehnt.
Jeder Schlüssel erbt das Limit der Anfragen pro Minute Ihrer Kundenstufe. Jede Antwort enthält RateLimit-Limit, RateLimit-Remaining und RateLimit-Reset; über dem Limit erhalten Sie 429 mit Retry-After.
Geltendes Limit für die Wiederverkäufer-Stufe1.200 Anfragen pro Minute
Jeder Schlüssel trägt nur die Berechtigungen, die Sie gewähren. Ein Aufruf außerhalb seiner Berechtigungen wird mit 403 FORBIDDEN abgelehnt.
| Berechtigung | Was er tut |
|---|---|
catalog:read | Dienste und Preise auflisten |
orders:read | Bestellungen lesen |
orders:write | Bestellungen erstellen, nachfüllen und stornieren |
wallet:read | Guthaben lesen |
assets:read | Ihre Inserate und Angebote auflisten |
assets:write | Inserate erstellen und bearbeiten, Verifizierung und Verfügbarkeit |
transactions:write | Übergabeschritte bei Geschäften erfassen |
Idempotenz
POST /v1/orders und POST /v1/orders/batch verlangen einen Idempotency-Key-Header mit 8 bis 120 Zeichen. Die Wiederholung eines Aufrufs mit demselben Schlüssel liefert dieselbe Bestellung ohne erneute Belastung. Die Wiederverwendung eines Schlüssels mit einem anderen Body wird mit 409 IDEMPOTENCY_KEY_REUSE abgelehnt. Innerhalb eines Stapels wird jedes Element über den Stapelschlüssel plus seinen Index identifiziert.
HTTP/1.1 409 Conflict
X-Request-Id: req_<hex>
{
"error": {
"code": "IDEMPOTENCY_KEY_REUSE",
"message": "..."
},
"request_id": "req_<hex>"
}Endpunkte
Alle Pfade liegen unter /v1 auf dem Host dieses Shops. Beträge sind immer Dezimalzeichenketten mit einer ISO-4217-Währung, nie Fließkommazahlen. Vollständige Anfrage- und Antwortschemata stehen in der OpenAPI-Datei.
| Methode | Pfad | Berechtigung | Was er tut |
|---|---|---|---|
| GET | /v1/catalog/platforms | catalog:read | Plattformen mit derzeit veröffentlichten Diensten |
| GET | /v1/catalog/services | catalog:read | Dienste mit dem Preis in Ihrer Währung und Stufe; nach Plattform filtern |
| GET | /v1/catalog/services/{id} | catalog:read | Ein Dienst mit seinem Feldschema |
| Methode | Pfad | Berechtigung | Was er tut |
|---|---|---|---|
| POST | /v1/orders/preview | orders:write | Prüfen und bepreisen, ohne etwas anzulegen oder zu berechnen |
| POST | /v1/ordersIdempotency-Key erforderlich | orders:write | Bestellung erstellen: belastet das Guthaben und routet an den besten Anbieter |
| GET | /v1/orders | orders:read | Bestellungen auflisten, neueste zuerst, mit Cursor-Paginierung |
| POST | /v1/orders/batchIdempotency-Key erforderlich | orders:write | Bis zu 100 Bestellungen in einem Aufruf, jede mit eigenem Ergebnis |
| GET | /v1/orders/{id} | orders:read | Eine Bestellung per ID abrufen |
| POST | /v1/orders/{id}/refill | orders:write | Nachfüllung innerhalb des Garantiezeitraums anfordern |
| POST | /v1/orders/{id}/cancel | orders:write | Stornierung anfordern; erstattet, sobald der Anbieter bestätigt |
| Methode | Pfad | Berechtigung | Was er tut |
|---|---|---|---|
| GET | /v1/wallet/balance | wallet:read | Guthaben je Währung: verfügbar, Bargeld, Bonus und reserviert |
| Methode | Pfad | Berechtigung | Was er tut |
|---|---|---|---|
| POST | /v1/assets | assets:write | Inseratentwurf anlegen; er geht nach Verifizierung und Moderation online |
| GET | /v1/assets | assets:read | Ihre Inserate |
| PATCH | /v1/assets/{id} | assets:write | Inserat aktualisieren (vollständiger Body; If-Match für optimistische Sperre) |
| POST | /v1/assets/batch | assets:write | Bis zu 1.000 Inserate importieren, zugeordnet über external_ref |
| POST | /v1/assets/{id}/verify | assets:write | Eigentumsverifizierung starten (method) oder prüfen (verification_id) |
| POST | /v1/assets/{id}/availability | assets:write | Inserat ausblenden oder einblenden (nicht während einer Verhandlung) |
| Methode | Pfad | Berechtigung | Was er tut |
|---|---|---|---|
| GET | /v1/offers | assets:read | Angebote auf Ihre Inserate |
| Methode | Pfad | Berechtigung | Was er tut |
|---|---|---|---|
| POST | /v1/transactions/{id}/handoff | transactions:write | Einen Ablaufschritt markieren, ein gesichertes Element hinzufügen oder die Übergabe abschließen |
HTTP/1.1 201 Created
X-Request-Id: req_<hex>
X-Api-Version: 2026-09-23
RateLimit-Limit: <limit> RateLimit-Remaining: <n> RateLimit-Reset: <seconds>
{
"id": "SMP-7K2Q9XHT",
"status": "routing",
"service": "<service_id>",
"link": "https://instagram.com/p/abc",
"quantity": 1000,
"charge": "<decimal>",
"refunded": "0",
"currency": "USD",
"start_count": null,
"remains": null,
"delivered": null,
"refill_until": null,
"created_at": "2026-09-23T12:00:00.000Z",
"updated_at": "2026-09-23T12:00:00.000Z"
}Webhooks
Registrieren Sie einen https-Endpunkt auf einem öffentlichen Host und wählen Sie die gewünschten Ereignisse. Jede Zustellung ist mit dem Geheimnis Ihres Endpunkts signiert, das bei der Erstellung einmal angezeigt wird.
POST /webhooks/orders HTTP/1.1
Content-Type: application/json
Webhook-Id: <event id>
Webhook-Timestamp: 1790000000
Webhook-Signature: t=1790000000,v1=<hex HMAC-SHA256(secret, "1790000000.<body>")>
{ "id": "<event id>", "type": "order.partial", "created_at": "2026-09-23T12:05:00.000Z",
"data": { "orderId": "SMP-7K2Q9XHT", ... } }import { createHmac, timingSafeEqual } from 'node:crypto';
export function verifyWebhook(secret, headers, rawBody) {
const t = headers['webhook-timestamp'];
const v1 = (headers['webhook-signature'] ?? '')
.split(',').find((p) => p.startsWith('v1='))?.slice(3) ?? '';
const expected = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300; // 5 minutes
return fresh && expected.length === v1.length
&& timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}Ereignisse werden in derselben Datenbanktransaktion wie die Änderung, die sie ausgelöst hat, in eine Outbox geschrieben, sodass nichts verloren geht, wenn eine Zustellung fehlschlägt. Fehlgeschlagene Zustellungen werden nach 1 Min., 5 Min., 30 Min., 2 Std., 6 Std., 12 Std. und 24 Std. wiederholt, bevor sie als endgültig ausgefallen markiert werden.
order.createdorder.status_changedorder.partialorder.completedorder.refundedorder.refill_updateddeposit.confirmedoffer.createdoffer.updatedreservation.createdtransaction.updatedpayout.updatedlisting.updateddispute.updatedKompatibilität
POST /api/v2 implementiert den gängigen Vertrag „SMM API v2“: Senden Sie Schlüssel und Aktion als Formularfelder oder JSON. Dieselben Schlüssel, Berechtigungen und Ratenlimits wie bei /v1; nur das Format ändert sich, und Fehler kommen als { "error": "message" } zurück.
Panels senden keinen Idempotenzschlüssel; er wird deshalb aus dem Bestellinhalt und der aktuellen Minute abgeleitet, das Doppelbestellungsfenster deckt den Rest ab.
curl -X POST https://YOUR-DOMAIN/api/v2 \
-d key=smp_live_xxxxxxxxxx_... \
-d action=add \
-d service=<service_id> \
-d link=https://instagram.com/p/abc \
-d quantity=1000
{ "order": "SMP-7K2Q9XHT" }Fehler
Jede Antwort ohne 2xx hat denselben Body. Integrieren Sie sich über den Code, nicht über die Meldung: Meldungen können sich ändern, Codes nicht. Die request_id wird außerdem im Header X-Request-Id gesendet.
HTTP/1.1 400 Bad Request
X-Request-Id: req_<hex>
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request.",
"details": {
"fields": [{ "path": "quantity", "message": "..." }]
}
},
"request_id": "req_<hex>"
}| Code | HTTP | Bedeutung |
|---|---|---|
VALIDATION_ERROR | 400 | Ungültiger Body oder Header; details.fields listet jeden Pfad und jedes Problem |
UNAUTHORIZED | 401 | Schlüssel fehlt, ist ungültig, widerrufen oder abgelaufen |
INSUFFICIENT_FUNDS | 402 | Guthaben für das Angebot zu niedrig |
FORBIDDEN | 403 | Schlüssel hat die Berechtigung nicht, IP nicht erlaubt, Unterbenutzer ohne Recht oder Konto gesperrt |
NOT_FOUND | 404 | Bestellung, Dienst oder Inserat existiert für dieses Konto nicht |
CONFLICT | 409 | Statuskonflikt, etwa das Limit aktiver Schlüssel |
INVALID_TRANSITION | 409 | Die Bestellung oder das Geschäft kann nicht in diesen Status wechseln |
DUPLICATE_ORDER | 409 | Gleicher Dienst, Link und Menge innerhalb des Doppelbestellungsfensters |
IDEMPOTENCY_KEY_REUSE | 409 | Idempotency-Key bereits mit einem anderen Body verwendet |
ALREADY_RESERVED | 409 | Das Asset ist von einem anderen Käufer reserviert |
POLICY_BLOCKED | 422 | Dienst oder Land durch die Richtlinie der Plattform blockiert |
MARGIN_GUARD | 422 | Kein Anbieter kann diese Bestellung zum veröffentlichten Preis ausführen |
UNPROCESSABLE | 422 | Die Anfrage ist gültig, kann aber nicht ausgeführt werden |
RATE_LIMITED | 429 | Limit pro Schlüssel erreicht; warten Sie die Sekunden aus Retry-After |
INTERNAL | 500 | Unerwarteter Fehler; kontaktieren Sie den Support mit der request_id |
PROVIDER_ERROR | 502 | Ausfall beim vorgelagerten Anbieter; die Bestellung wird wiederholt oder erstattet |
NO_ROUTE | 503 | Derzeit keine Anbieter-Route verfügbar; später erneut versuchen |
NOT_CONFIGURED | 503 | Funktion in diesem Shop nicht konfiguriert |
Wer sie nutzen kann
API-Schlüssel und Webhook-Endpunkte werden vom Kontoinhaber im Wiederverkäufer-Tarif angelegt. Bestellungen mit einem Schlüssel werden vom Kontoguthaben belastet und erscheinen im selben Dashboard wie manuelle Bestellungen. Unterbenutzer können keine Schlüssel erstellen.
Ob Sie ein Panel betreiben, das einen zuverlässigen Anbieter braucht, ein Agentur-Werkzeug, das Bestellungen für Kunden aufgibt, oder einen Verkäuferbestand, der mit dem Marktplatz synchron bleiben muss: Die Integration folgt demselben Muster — ein eingeschränkter Schlüssel, idempotente Schreibvorgänge und Ereignisse, die Sie prüfen, bevor Sie ihnen vertrauen.
Jeder Endpunkt liegt unter /v1 auf dem Host des Shops, mit dem Sie integrieren. Antworten sind JSON, Geldbeträge sind Dezimalzeichenketten mit einer ISO-4217-Währung, und Zeitstempel sind ISO 8601. Jede Antwort trägt einen Header X-Api-Version mit dem Datum des Vertrags, mit dem Sie kommunizieren, und eine X-Request-Id, die Sie beim Support angeben können. Fehler haben immer denselben Body: ein Fehlerobjekt mit einem stabilen Code, einer lesbaren Meldung und optionalen Details, zusammen mit der request_id.
Die OpenAPI-3.1-Datei beschreibt jeden Pfad, jedes Schema und jeden Fehlercode. Importieren Sie sie in Ihren HTTP-Client oder Generator, und Sie erhalten typisierte Anfragen für Katalog, Bestellungen, Guthaben, Inserate, Angebote und Geschäftsübergaben.
Ein Schlüssel wird vom Kontoinhaber im Wiederverkäufer-Tarif erstellt und einmal angezeigt; gespeichert wird nur ein Hash. Bei der Erstellung wählen Sie seine Berechtigungen, eine optionale IP-Allowlist mit bis zu 20 Adressen und ein optionales Ablaufdatum. Eine Rotation erstellt einen neuen Schlüssel mit denselben Berechtigungen und widerruft den alten, sodass Sie Zugangsdaten ohne Ausfallzeit austauschen können. Mit einem Schlüssel aufgegebene Bestellungen werden vom Kontoguthaben belastet und erscheinen im selben Dashboard wie manuelle Bestellungen, mit der Quelle API.
Jeder Schlüssel erbt das Limit der Anfragen pro Minute der Kundenstufe des Kontos. Die Header RateLimit-Limit, RateLimit-Remaining und RateLimit-Reset zeigen Ihren Stand; wird das Limit überschritten, antwortet die API mit 429 und einem Header Retry-After, und die richtige Reaktion ist, genau diese Zeit zu warten.
Die Erstellung einer Bestellung ist der einzige Aufruf, der Geld bewegt, daher ist sie doppelt geschützt. Erstens ist der Header Idempotency-Key Pflicht: Die Wiederholung einer Anfrage mit demselben Schlüssel liefert die ursprüngliche Bestellung ohne zweite Belastung, und die Wiederverwendung des Schlüssels mit einem anderen Body wird mit 409 IDEMPOTENCY_KEY_REUSE abgelehnt. Zweitens erkennt ein Doppelbestellungsfenster denselben Dienst, Link und dieselbe Menge, die in einem kurzen Intervall ohne passenden Schlüssel erneut gesendet werden, und antwortet mit 409 DUPLICATE_ORDER.
Stapel nehmen bis zu 100 Bestellungen pro Aufruf an. Jedes Element wird einzeln geprüft und belastet, identifiziert über den Stapelschlüssel plus seinen Index; die Antwort listet ein Ergebnis pro Element, sodass eine fehlerhafte Zeile nie die übrigen blockiert. Nutzen Sie zuerst POST /v1/orders/preview, wenn Sie die genaue Belastung und das Prüfergebnis ohne Anlegen wollen.
Jede Zustandsänderung wird in derselben Datenbanktransaktion wie die Änderung selbst in eine Outbox geschrieben, und ein Verteiler liefert sie an Ihren https-Endpunkt mit drei Headern: Webhook-Id, Webhook-Timestamp und Webhook-Signature. Die Signatur ist ein HMAC-SHA256 über den Zeitstempel, einen Punkt und den rohen Body, berechnet mit dem Endpunkt-Geheimnis, das bei der Erstellung einmal angezeigt wird. Prüfen Sie sie in konstanter Zeit, lehnen Sie Zeitstempel ab, die älter als fünf Minuten sind, und dedupliziere nach Webhook-Id, weil ein wiederholtes Ereignis dieselbe Id trägt.
Zustellungen ohne 2xx werden nach 1 Minute, 5 Minuten, 30 Minuten, 2 Stunden, 6 Stunden, 12 Stunden und 24 Stunden wiederholt, bevor sie als endgültig ausgefallen markiert werden. Antworten Sie schnell und verarbeiten Sie asynchron; ein langsamer Handler ist der häufigste Grund für doppelte Verarbeitung.
Wenn Ihr Panel bereits das verbreitete Format „SMM API v2“ spricht, können Sie diesen Shop als Anbieter hinzufügen, indem Sie die URL /api/v2 und Ihren Schlüssel einfügen. Die Aktionen services, add, status, balance, refill, refill_status und cancel werden unterstützt, Preise kommen in Ihrer Kontowährung und Ihrer Stufe zurück, und Fehler nutzen die flache Form { "error": "message" }, die solche Panels erwarten. Die Idempotenz wird aus dem Bestellinhalt und der aktuellen Minute abgeleitet, sodass versehentliche Doppelübermittlungen innerhalb derselben Minute zusammengeführt werden.
Den Wiederverkäufer-Tarif. API-Schlüssel und Webhook-Endpunkte werden vom Kontoinhaber erstellt; Unterbenutzer können sie nicht erstellen. Schlüssel sind serverseitige Zugangsdaten und dürfen nie in einen Browser oder eine mobile App eingebettet werden.
Senden Sie den Schlüssel als Authorization: Bearer smp_live_… oder in einem X-Api-Key-Header. Der Schlüssel muss die Berechtigung tragen, die der Endpunkt verlangt, zum Beispiel orders:write zum Erstellen einer Bestellung oder catalog:read zum Auflisten der Dienste.
Senden Sie sie mit demselben Idempotency-Key erneut. Sie erhalten die ursprüngliche Bestellung, und nichts wird doppelt belastet. Senden Sie unter demselben Schlüssel einen anderen Body, antwortet die API mit 409 IDEMPOTENCY_KEY_REUSE.
Berechnen Sie HMAC-SHA256 mit dem Geheimnis Ihres Endpunkts über den String aus Webhook-Timestamp, einem Punkt und dem rohen Body, und vergleichen Sie ihn dann in konstanter Zeit mit dem v1-Wert in Webhook-Signature. Lehnen Sie Zeitstempel ab, die älter als 5 Minuten sind, und dedupliziere nach Webhook-Id.
Jeder Schlüssel erbt das Limit der Anfragen pro Minute Ihrer Kundenstufe, das auf dieser Seite angezeigt wird. Die RateLimit-*-Header melden das aktuelle Fenster, und eine 429-Antwort enthält Retry-After in Sekunden.
Ja. GET /v1/catalog/services liefert den Preis bereits in Ihre Kontowährung umgerechnet mit Ihrem Stufenrabatt, und POST /v1/orders/preview liefert die genaue Belastung einschließlich Mengenrabatten und Gutscheinen, bevor Sie sich festlegen.
Ja. Mit der Berechtigung assets:write können Sie Inserate erstellen und ändern, bis zu 1.000 auf einmal importieren, eine Eigentumsverifizierung starten und die Verfügbarkeit umschalten; assets:read listet Ihre Inserate und Angebote, und transactions:write erfasst Übergabeschritte bei einem Geschäft.
Erstellen Sie im Wiederverkäufer-Tarif einen Schlüssel, laden Sie die OpenAPI-Datei herunter und senden Sie Ihre erste Bestellung aus Ihrem eigenen System.
Wir verkaufen niemals Bewertungen oder Sterne. Einige Plattformen beschränken in ihren Bedingungen Engagement-Dienste oder Kontoübertragungen; Sie sind für die Regeln jeder Plattform verantwortlich, die Sie nutzen.