Doku-Menü

API

Better Social bietet eine Entwickler-API im Stil von JustAnotherPanel (JAP) v2, wie sie viele SMM-Panels nutzen. Die meisten bestehenden Panel-Clients funktionieren daher, sobald du Endpunkt und Schlüssel änderst.

Endpunkt und Authentifizierung

Endpunkthttps://better-social.pro/api/v2
MethodenPOST mit Form-urlencoded- oder JSON-Body oder GET mit Query-Parametern
In jeder Anfrage erforderlichkey (dein persönlicher API-Schlüssel) und action
AntwortformatJSON
WährungUSD

So bekommst du deinen Schlüssel: Öffne im Dashboard Tools → API. Ein Schlüssel wird automatisch erstellt, wenn du diese Seite zum ersten Mal öffnest. Dort kannst du ihn anzeigen, kopieren oder neu generieren (Regenerate). Beim Neu-Generieren funktioniert der alte Schlüssel sofort nicht mehr.

API-Bestellungen unterliegen denselben Guthaben- und Prüfregeln wie Bestellungen im Dashboard. GET ist praktisch für schnelle Tests, legt deinen Schlüssel aber in URLs und Server-Logs ab, nutze im Produktivbetrieb also POST.

Halte deinen API-Schlüssel geheim

Jeder, der deinen Schlüssel hat, kann mit deinem Guthaben Bestellungen aufgeben. Bewahre ihn nur auf deinem Server auf. Packe ihn nie in Browser-JavaScript, mobile Apps oder öffentliche Repositories. Wenn er durchgesickert ist, generiere ihn sofort im Dashboard neu. Das Better-Social-Team wird dich nie nach deinem API-Schlüssel fragen.

Übersicht der Aktionen

AktionParameter (außer key)Rückgabe
serviceskeineListe der verfügbaren Services
addservice, link, quantity, optional comments{"order": ..., "charge": ...}
statusorder (oder orders)Status einer Bestellung (oder mehrerer)
multi_statusorders (kommagetrennt)Status nach Bestell-ID
balancekeine{"balance": ..., "currency": "USD"}
refillorder oder ordersDie Antwort des Lieferanten
cancelorder oder ordersDie Antwort des Lieferanten

services: Services auflisten

curl -X POST https://better-social.pro/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=services

Gibt ein Array mit einem Objekt pro verfügbarem Service zurück:

FeldTypBedeutung
serviceintegerService-ID, wird in add verwendet
namestringName des Services
typestringImmer "Default"
categorystringName der Kategorie
ratestringPreis pro 1000 in USD, 4 Nachkommastellen
min, maxstringMindest- und Höchstmenge
refillbooleanOb der Service Refills unterstützt
cancelbooleanOb der Service Stornierungsanfragen unterstützt
dripfeedbooleanDrip-Feed-Kennzeichen
needs_custom_textbooleanBei true sende comments mit add

Beispielantwort (Werte zur Veranschaulichung)

[
  {
    "service": 101,
    "name": "TikTok Live Likes",
    "type": "Default",
    "category": "TikTok Live",
    "rate": "1.5000",
    "min": "100",
    "max": "100000",
    "refill": false,
    "cancel": false,
    "dripfeed": false,
    "needs_custom_text": false
  }
]

add: eine Bestellung aufgeben

ParameterPflichtBeschreibung
servicejaService-ID (integer) aus services
linkjaZiel-Benutzername oder -Link. Für TikTok-Live-Services: @username oder https://www.tiktok.com/@username
quantityja*Ganzzahl zwischen min und max des Services
commentsbei Services mit eigenen KommentarenErforderlich, wenn needs_custom_text den Wert true hat. Ein Kommentar pro Zeile. Die Menge ist dann die Anzahl der nicht leeren Zeilen, und eine gesendete quantity wird ignoriert.

Der Betrag ist rate × quantity ÷ 1000 und wird von deinem Guthaben abgezogen. Reicht dein Guthaben nicht, wird die Bestellung abgelehnt.

curl -X POST https://better-social.pro/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=add \
  -d service=101 \
  -d link=@username \
  -d quantity=500

Antwort

{"order": 123456, "charge": "0.7500"}

Verwende den zurückgegebenen Wert order mit status, refill und cancel. Manuelle Services geben eine Bestell-ID als String und "manual": true zurück, zum Beispiel {"order": "3f2c...", "manual": true, "charge": "5.0000"}.

Eigene Kommentare (JSON-Body)

curl -X POST https://better-social.pro/api/v2 \
  -H "Content-Type: application/json" \
  -d '{"key":"YOUR_API_KEY","action":"add","service":202,"link":"@username","comments":"Great stream!\nHello from Podgorica"}'

status: eine Bestellung prüfen

curl -X POST https://better-social.pro/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=status \
  -d order=123456

Antwort

{
  "charge": "0.7500",
  "start_count": null,
  "status": "In progress",
  "remains": "120",
  "currency": "USD",
  "order": 123456
}
  • status kommt vom Lieferanten (zum Beispiel Pending, In progress, Completed, Partial, Canceled).
  • remains ist die vom Lieferanten noch nicht gelieferte Menge oder null, wenn sie unbekannt ist. start_count ist derzeit immer null.
  • Eine unbekannte Bestell-ID liefert {"error": "not found"}.
  • Jeder Status-Aufruf fragt beim Lieferanten einen frischen Status ab, frage also nicht in einer schnellen Schleife ab.

multi_status: mehrere Bestellungen prüfen

Sende orders als kommagetrennte Liste (auch ein | als Trennzeichen funktioniert). Die Antwort ist ein Objekt mit den von dir gesendeten IDs als Schlüssel. status mit mehreren IDs in orders verhält sich genauso. status mit einer einzelnen ID gibt ein einzelnes Objekt zurück.

curl -X POST https://better-social.pro/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=multi_status \
  -d orders=123456,123457

Antwort

{
  "123456": {"charge": "0.7500", "start_count": null, "status": "Completed", "remains": "0", "currency": "USD", "order": 123456},
  "123457": {"error": "not found"}
}

balance: Guthaben prüfen

curl "https://better-social.pro/api/v2?key=YOUR_API_KEY&action=balance"

Antwort

{"balance": "12.3400", "currency": "USD"}

refill und cancel

Sende order (eine ID) oder orders (kommagetrennt). Deine Anfrage wird an den Lieferanten weitergeleitet, und dessen Antwort wird unverändert zurückgegeben. Bei mehreren IDs kommt sie als Objekt mit deinen IDs als Schlüssel zurück. Unbekannte IDs liefern {"error": "not found"}.

curl -X POST https://better-social.pro/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=refill \
  -d order=123456

Ob ein Refill oder eine Stornierung möglich ist, hängt vom Service ab (siehe die Flags refill und cancel in services). Unsere Stornierungsregeln gelten weiterhin: Bestellungen, die gestartet sind, können nicht storniert werden.

Fehler

Fehler verwenden HTTP-Statuscodes mit einem JSON-Body. Die meisten sehen aus wie {"detail": {"error": "message"}}. Manche nutzen einen einfachen String, etwa {"detail": "Invalid API key"}. Prüfe immer den HTTP-Statuscode.

HTTPWann
400action fehlt, unbekannte Aktion, service/link/quantity fehlt oder ist ungültig, Menge außerhalb von Min/Max, Kommentare fehlen bei einem Service mit eigenen Kommentaren, oder ein Link-Format ist für TikTok-Live-Services nicht erlaubt
401API-Schlüssel fehlt oder ist ungültig
402Nicht genug Guthaben für die Bestellung
403Konto gesperrt oder der Ziel-Benutzername ist geschützt
404Service nicht verfügbar
502Der Lieferant hat einen Fehler zurückgegeben
503Wartungsarbeiten laufen. Bitte versuche es später erneut.

In den Ergebnissen von status, multi_status, refill und cancel wird ein Problem mit einer einzelnen Bestellung als {"error": "..."} für diese Bestellung gemeldet, mit HTTP 200.

Python-Beispiel

import os
import requests

API = "https://better-social.pro/api/v2"
KEY = os.environ["BETTER_SOCIAL_API_KEY"]  # keep the key out of your code

def call(action, **params):
    r = requests.post(API, data={"key": KEY, "action": action, **params}, timeout=30)
    r.raise_for_status()
    return r.json()

print(call("balance"))
order = call("add", service=101, link="@username", quantity=500)
print(call("status", order=order["order"]))

Best Practices

  • Speichere den Schlüssel in einer Umgebungsvariable oder einem Secret-Manager, nie in Frontend-Code.
  • Generiere den Schlüssel neu, wenn du glaubst, dass er offengelegt wurde oder wenn jemand mit Zugriff dein Team verlässt.
  • Lies services regelmäßig. Preise und Verfügbarkeit ändern sich.
  • Halte die Regel „eine Bestellung pro Link” ein. Siehe Bestellungen.
  • Frage Status in einem vernünftigen Intervall ab, zum Beispiel alle paar Minuten, am besten mit multi_status.